为什么我的try / catch块会保持循环?

时间:2014-10-03 01:09:00

标签: java try-catch

当我运行此代码时,代码跳过input.nextInt();并进入圈子:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    // Link user to programs (ToC)
    int loop = 1;

    do {
        try {
            System.out.println("Please choose a number: ");
            System.out.println("0. Exit");
            System.out.println("1. Calculator");
            int numChoice = input.nextInt();
            if (numChoice == 0) {
                System.exit(0);
            } else if (numChoice == 1) {
                System.out.println("Going to Calculator...");
                new Calculator();
            } else {
                System.out.println("Not a valid choice.");
            }
        }
        catch (Exception e) {
            System.out.println("Please input a number!");
        }
    } while (loop == 1);
}

似乎是出于某种原因跳过int numChoice。另外,请不要太技术化。我只是为了休闲而编码。

1 个答案:

答案 0 :(得分:3)

你的循环进入圈子有两个原因:

  • 您尝试使用nextInt,但是如果失败则无法清除输入缓冲区,
  • 即使您在catch中确实输入了清晰的输入,您的循环仍然会继续,因为没有loop变量的赋值可以阻止循环。