Reputation: 33
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
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
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