AwesomeJim
AwesomeJim

Reputation: 5

Issues with loop skipping every other input in java

I'm trying to create this rather simple program for my java class. Everything is working, except for when I tried to have an input loop. I've never done that before, and it's ignoring every other input. Here is the problem prompt:

B. Ch. 4 – Average - Write a program that will read an unspecified number of integer grades and find the summary total and average. Print grades, total and average. The last record will be the trailer record of -1. Also output the final letter grade per syllabus grading scale.

And here is the code:

import java.util.Scanner;
public class Average
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        float counter = 0;
        float accum = 0;
        float addAccum = 0;
        float tempLoop = 0;
        System.out.println("Please Enter Grade, Enter -1 to Finish: ");

        while (tempLoop != -1)
        {
            addAccum = in.nextFloat();
            counter++;
            accum = addAccum + accum;
            tempLoop = in.nextFloat();
        }
        float avgGrade = accum / counter;
        if(avgGrade >= 90)
        {
            System.out.println("\nYour Grade is: " + "A");
        }else if(avgGrade >=80)
        {
            System.out.println("\nYour Grade is: " + "B");
        }else if(avgGrade >=70)
        {
            System.out.println("\nYour Grade is: " + "C");
        }else if(avgGrade >=60)
        {
            System.out.println("\nYour Grade is: " + "D");
        }else
        {
            System.out.println("\nYour Grade is: " + "F");
        }
        System.out.println("\nGrade Total: " + accum);
        System.out.println("\nCounter Num :" + counter); // for testing only
        System.out.println("\nAverage Grade: " + avgGrade);
    }
}

This is the console input/output:

Please Enter Grade, Enter -1 to Finish:
100
100
100
100
100
100
-1
-1

Your Grade is: C

Grade Total: 299.0

Counter Num :4.0

Average Grade: 74.75

Upvotes: 0

Views: 597

Answers (3)

Balázs Édes
Balázs Édes

Reputation: 13807

To avoid reading twice and reading inside the loop, or add ugly break statements, i would do it like this:

while ((addAccum = in.nextFloat()) != -1) {
    counter++;
    accum = addAccum + accum;
}

Upvotes: 0

DoubleFission
DoubleFission

Reputation: 111

What you're doing is reading twice;

while (tempLoop != -1)
{
    addAccum = in.nextFloat();  // Once Here
    counter++;
    accum = addAccum + accum;
    tempLoop = in.nextFloat();  // Again Here
}

Thus only half of the data is being processed;

You'll need to read the first value before entering the loop, and then only read once at the end before checking that the new value is not -1

Upvotes: 0

Gyan
Gyan

Reputation: 1176

You have in.nextFloat() twice in your while loop. Change your logic to look for -1 first and then process the input.

Something like :

  tempLoop = in.nextFloat();
  while(tempLoop != -1){

     sum += tempLoop;
     tempLoop = in.nextFloat();
  }

Hope this helps.

Upvotes: 4

Related Questions