Pregunta

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
¿Fue útil?

Solución

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.

Otros consejos

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

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top