Makodess
Makodess

Reputation: 33

Array iteration: Sum of excess (Java)

My assignment is to sum up any excess over 100 with the scores given. The instructions for the assignment are as follows:

"Array testGrades contains NUM_VALS test scores. Write a for loop that sets sumExtra to the total extra credit received. Full credit is 100, so anything over 100 is extra credit. Ex: If testGrades = {101, 83, 107, 90}, then sumExtra = 8, because 1 + 0 + 7 + 0 is 8."

My current code is:

import java.util.Scanner;

public class SumOfExcess {

    public static void main (String [] args) {
      final int NUM_VALS = 4;
      int[] testGrades = new int[NUM_VALS];
      int i = 0;
      int sumExtra = -9999; // Assign sumExtra with 0 before your for loop

      testGrades[0] = 101;
      testGrades[1] = 83;
      testGrades[2] = 107;
      testGrades[3] = 90;

      sumExtra = 0;
      for (i = 0; i < NUM_VALS; ++i){
         if (testGrades[i] > 100){ 
            sumExtra = (testGrades[i] % 100);
         }
      }

      System.out.println("sumExtra: " + sumExtra);

      return;
    }

}

Upvotes: 0

Views: 27623

Answers (2)

SonOfGoose97
SonOfGoose97

Reputation: 11

Here is my answer! You almost had it, just change to

  sumExtra = 0;
  for (i = 0; i < NUM_VALS; ++i){
     if (testGrades[i] > 100){ 
        sumExtra += (testGrades[i] % 100);  // you had just =, but should be +=
     }
  }

Upvotes: 1

Florian Link
Florian Link

Reputation: 638

The issue is in the following line

sumExtra = (testGrades[i] % 100);

You are always assigning sumExtra a new value and not summing up. You should replace it with

sumExtra += (testGrades[i] % 100);

That being said, you should also replace your modulo operation with a minus to make your code work correctly with values larger than 199.

You could also use streams:

sumExtra = IntStream.of(testGrades).filter(t -> t > 100).map(t -> t - 100).sum();

Upvotes: 8

Related Questions