Why won’t the program include the first input from the user in the calculation of the average?

This code is meant to output an average of -1 if the first value entered by the user is -1. If the value entered is not -1, then it will calculate the average of the given values, and it will stop when the value -1 is entered and it will be the stopping signal for the program. The task is to modify an existing DoWhile loop – which I have done.

Now, after having written the code, I can’t seem to understand why the program isn’t including the first input from the user, for the calculation of the average.

Scanner input = new Scanner(System.in);

float grade;
float sumGrades, average;
int studentCount = 0;
sumGrades = 0;

final int STOP = -1;

System.out.printf("nEnter a grade (%d to finish): ", STOP);
grade = input.nextFloat();
if(grade == STOP)
{
      sumGrades = sumGrades + grade;
      studentCount++;
}
else
    do
    {
    System.out.printf("nEnter a grade (%d to finish): ", STOP);
    grade = input.nextFloat();

    if(grade != STOP)
      {
      sumGrades = sumGrades + grade;
      studentCount++;
      }
    } while(grade != STOP);

average = sumGrades / studentCount;
System.out.printf("The average obtained is %.1fn", average);

OUTPUT:

Enter a grade (-1 to finish): 2

Enter a grade (-1 to finish): 3

Enter a grade (-1 to finish): 4

Enter a grade (-1 to finish): 5

Enter a grade (-1 to finish): 2

Enter a grade (-1 to finish): 3

Enter a grade (-1 to finish): -1

The average obtained is 3.4

OUTPUT 2:

Enter a grade (-1 to finish): 2

Enter a grade (-1 to finish): -1

The average obtained is NaN

Image of Compiled Code and Run

Code

Answer

main issiue is here:

   final int STOP = -1;


        System.out.printf("nEnter a grade (%d to finish): ", STOP);
      grade = input.nextFloat(); 
if(grade == STOP)
{
      sumGrades = sumGrades + grade;
      studentCount++;
}

here you read input, and just check if its STOP, bud you do nothing with input if isnt STOP in next

else
    do
    {
    System.out.printf("nEnter a grade (%d to finish): ", STOP);
    grade = input.nextFloat();

you again read input and then process it if isnt STOP and you lose your first input

solution by one cycle:

do
    {
    System.out.printf("nEnter a grade (%d to finish): ", STOP);
    grade = input.nextFloat();
        if(grade != STOP)
          {
            sumGrades = sumGrades + grade;
            studentCount++;
          }

      } while(grade != STOP);

Leave a Reply

Your email address will not be published. Required fields are marked *