Никогда не заканчивается для l oop с пользовательским вводом - PullRequest
0 голосов
/ 19 апреля 2020

Я новичок в java и только что узнал, как использовать пользовательский ввод. У меня есть для l oop, который проходит через 10 раз с пользовательским вводом, чтобы запросить номер. Если число недопустимо, оно должно вывести «Недопустимое число» и не учитываться при увеличении для l oop. Вместо этого он просто зацикливается навсегда, говоря «Неверное число».

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int sum = 0;
        Scanner scanner = new Scanner(System.in);
        for(int i = 1; i<=10; i++){
            System.out.println("Enter number #" + i + " ");
            boolean validInt = scanner.hasNextInt();
            if(validInt){
                int num = scanner.nextInt();
                sum += num;
            } else{
                System.out.println("Invalid Number");
                i--;
            }
        }
        System.out.println("Sum was " + sum);
        scanner.close();
    }
}

Ответы [ 3 ]

0 голосов
/ 19 апреля 2020

Проблема в том, что вы обновляете итератор i в 2 местах.

Лучше всего обновить его в соответствии с условием.

Я бы также предложил вам использовать классов-оболочек для безопасных целочисленных преобразований и обработки исключений должным образом, как это сделано в следующем коде:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int sum = 0;
        Scanner scanner = new Scanner(System.in);
        for(int i = 1; i<=10; ){

            System.out.println("Enter number #" + i + " ");

            String input = scanner.nextLine();

            try{

                int num = Integer.parseInt(input);
                sum += num;

                i++; // If input is a valid integer, then only update i

            }catch(NumberFormatException e){

                System.out.println("Invalid Number");
            }
        }
        System.out.println("Sum was " + sum);
        scanner.close();
    }
}
0 голосов
/ 19 апреля 2020

Я думаю, что вы также можете настроить код с помощью hasNextInt () непосредственно в то время как l oop.

while (scanner.hasNextInt()) { 
  int num = scanner.nextInt();
  sum += num;
}
0 голосов
/ 19 апреля 2020

Мне нужно было добавить

scanner.nextLine();

после оператора if и else для очистки сканера в обеих ситуациях.

...