尝试捕捉分配值问题

时间:2020-12-26 15:47:35

标签: java try-catch

当我输入 int 第一个程序检查并分配值但不打印时,下一个 int 我输入它确实打印但输入了第一个值。如果值为字符串,则再次询问但不将值分配给数字。我该如何解决这个问题?提前致谢。

public static void main(String[] args) {

    int number = 0;

    Scanner kb = new Scanner(System.in);

    do {
        try {
            System.out.println("Enter a number: ");
            number = kb.nextInt();
        } catch (Exception e) {
            System.out.println("Not a number!");
            kb.nextLine();

        }

    } while (!kb.hasNextInt());
    System.out.println(number);

}

输出

Enter a number: ab
Not a number!
5
Number: 0

1 个答案:

答案 0 :(得分:1)

  1. 不要将 nextLine 和 nextAnything 混用。如果您想阅读整行,请使用 .next(),并更新您的扫描仪的分隔符:scanner.useDelimiter("\r?\n"); - 按照您的方式进行意味着,如果用户使用键盘上最大的键,您的应用程序就会中断。

  2. 你或许应该把它放在一个实用方法中。

  3. 不要在 while 条件中使用 .hasNextInt()。如果用户输入非数字,则返回 false。只要让它为真,如果输入正确就跳出循环。请注意,kb.hasNextInt 将冻结(等待)直到用户输入内容。毕竟,只要用户没有输入另一个令牌,扫描仪怎么可能告诉你它是不是一个整数?