为什么我的异常处理会导致无限循环?

时间:2016-08-22 18:54:42

标签: java exception-handling infinite-loop

我正在编写一个返回整数值的方法。在方法中,我通过扫描仪类通过控制台提示用户输入整数。

因为我使用的是扫描方法“scan.nextInt()”,所以我也在检查“InputMismatchException”错误。我已将异常处理放在循环中,以便在捕获异常时通知用户并重复循环。这将要求用户继续输入值,直到只输入一个整数值。

但是,我的问题是在第一次检查错误之后,当它循环回来时,发生了某些事情并且没有提示用户输入新值并且再次抛出异常。这当然会导致无限循环。

我已经研究并发现了一些与此问题相关的案例,我尝试过执行相关修复,但我做的任何事情似乎都没有用,我不明白到底发生了什么。是否跳过了try块?我对try块的表示法有什么问题吗?

public static int inputCheck() {
int check=0;
int money = 0;
while (check==0) {
  boolean error = false;
  System.out.println("Please enter the amount of money your player has.");
  while (true) {
    try {
      money = scan.nextInt();
    }catch (InputMismatchException wrongInput) {
      System.out.println("Error. Please enter an integer value." + wrongInput);
      error = true;
    }
    break;
  }
  if (error==false)
    check++;
  }
return money;
}

编辑代码已被编辑,“错误”布尔值已被调整

3 个答案:

答案 0 :(得分:0)

当你将错误设置为true时,问题出现在你的问题中。一旦将error设置为true,就会以无法退出的方式构造循环,因为错误永远不会设置为false,因此check永远不会递增。我会重新构建这个循环系统,有更好的方法来处理它。

答案 1 :(得分:0)

试试这个:

public static int inputCheck() {
    int check = 0;
    int money = 0;

    while (check == 0) {
        boolean error = false;
        System.out.println("Please enter the amount of money your player has.");
        try {
            money = Integer.parseInt(scan.next());
        } catch (Exception e) {
            System.out.println("Error. Please enter an integer value." + e);
            error = true;
        }
        if (error == false) {
            check++;
        }
    }
    return money;
}

答案 2 :(得分:-1)

while(true)永远不会是假的,所以如果循环没有点击break语句,那么循环永远不会终止