Проблемы с циклом, пропускающим все остальные входные данные в java

Я пытаюсь создать эту довольно простую программу для своего класса Java. Все работает, за исключением того случая, когда я пытался ввести цикл ввода. Я никогда не делал этого раньше, и он игнорирует все остальные входные данные. Вот подсказка о проблеме:

Б. Ч. 4 – Среднее. Напишите программу, которая будет считывать неопределенное количество целочисленных оценок и находить итоговую сумму и среднее значение. Распечатайте оценки, общие и средние. Последней записью будет трейлерная запись -1. Также выведите окончательную буквенную оценку по шкале оценок учебной программы.

А вот код:

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);
    }
}

Это консольный ввод/вывод:

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

person AwesomeJim    schedule 10.02.2014    source источник
comment
Попробуйте использовать цикл do/while. Do попросить пользователя ввести оценку While оценка не равна -1.   -  person takendarkk    schedule 10.02.2014


Ответы (3)


У вас дважды есть in.nextFloat() в цикле while. Измените свою логику, чтобы сначала искать -1, а затем обрабатывать ввод.

Что-то типа :

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

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

Надеюсь это поможет.

person Gyan    schedule 10.02.2014

Что вы делаете, так это читаете дважды;

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

Таким образом обрабатывается только половина данных;

Вам нужно будет прочитать первое значение перед входом в цикл, а затем прочитать только один раз в конце, прежде чем проверять, что новое значение не равно -1.

person DoubleFission    schedule 10.02.2014

Чтобы избежать повторного чтения и чтения внутри цикла или добавления уродливых операторов break, я бы сделал это так:

while ((addAccum = in.nextFloat()) != -1) {
    counter++;
    accum = addAccum + accum;
}
person Balázs Édes    schedule 10.02.2014