永无止境的用户输入循环

时间:2020-04-19 05:13:13

标签: java for-loop input

我是Java的新手,并且刚刚学习了如何使用用户输入。我有一个for循环,需要用户输入10次才能输入数字。如果数字无效,则应打印“ Invalid number”,并且不计入递增的for循环中。取而代之的是,它永远循环播放,说“无效号码”。

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 :(得分:0)

问题是您要在2个地方更新迭代器i

更好的方法是根据情况进行更新。

我还建议您利用包装器类进行安全的整数转换,并像下面的代码一样正确处理异常:

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

答案 1 :(得分:0)

我认为您也可以直接在while循环中使用hasNextInt()调整代码。

while (scanner.hasNextInt()) { 
  int num = scanner.nextInt();
  sum += num;
}

答案 2 :(得分:-1)

我需要添加一个

scanner.nextLine();

在if and else语句之后,在两种情况下都清除扫描仪。