Java: цикл, в котором пользователь вводит целые числа, неправильно суммируя записи - PullRequest
0 голосов
/ 23 октября 2019

Мне нужно написать программу, которая запрашивает целые числа и циклы до тех пор, пока ввод не станет отрицательным целым числом, когда программа закончится. Кроме того, в цикле необходимо подсчитать общее количество положительных целочисленных записей и добавить все записи вместе. Часть кода count, кажется, работает нормально, но мой подход к получению суммы всех записей НЕ работает.

То, что я пробовал в своем коде, это поместить итоговое значение = общее + входное значение в конце цикла, но это не дает правильную сумму при тестировании.

Кроме того, мой безопасный тип блока работает только для первой записи;если я ввожу букву после целого числа, программа вылетает. Не должен ли этот цикл вернуться к блоку типа safe в начале каждой записи?

Я вставил копию своего вывода внизу.

Любая помощь будет принята.

    int count   =   0;
    int total   =   0;

    Scanner scan = new Scanner(System.in);

    System.out.print( "Enter an integer, negative to quit: " );

    while(!scan.hasNextInt())
            {
                scan.nextLine();
                System.out.println( "That is not an integer." );
                System.out.println( "Please enter an integer." );
            }

    int input = scan.nextInt();

    while (input >= 0)
        {
            System.out.print( "Next integer: " );

            input = scan.nextInt();

            count++;
            total   =   total + input;
        }

    System.out.println( "Count: " + count ); 
    System.out.println( "Total: " + total );

Когда я запускаю свой код, я получаю следующий вывод:

run:

Введите целое число, отрицательное для выхода: h

Это нецелое число.

Пожалуйста, введите целое число:

1

Следующее целое число: 2

Следующее целое число: 3

Следующее целое число:-1

Количество: 3

Всего: 4

СТРОИТЬ УСПЕШНО (общее время: 10 секунд)

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

Поменяйте местами порядок операций. Сначала сумма и число, , затем получить новый вход:

while (input >= 0) {
    total = total + input;
    count++;

    System.out.print("Next integer: ");
    input = scan.nextInt();
}

Ваш текущий код сбрасывает первый вход 1 и запускаетсясуммирование и подсчет с помощью второго входа 2.

1 голос
/ 23 октября 2019

Вам нужно проверять на каждой итерации, является ли следующая запись integer или нет. Кроме того, вам нужно сложить начальные integer, прежде чем просить следующее:

int input = 0;
int count = 0;
int total = 0;
do{
    System.out.print("Enter an Integer: ");
    total += input;
    if(!scan.hasNextInt()) {
        scan.nextLine();
        System.out.println( "That is not an integer." );
        input = 0;
     } else {
         input = scan.nextInt();
         count++;
     }
 } while(input >= 0);

System.out.println("Count: " + (count - 1));
System.out.println("Total: " + total);
...