抓住异常后感到困惑

时间:2013-07-24 06:29:29

标签: java loops exception-handling try-catch java.util.scanner

我对代码中的catch语句之后的操作有点困惑。抛出异常并在循环中捕获后,循环变为无限。我还发现输入一个很长的序列(+10左右)的数字将导致循环无限。我在java中的异常处理方面相当新,所以详细描述将非常有教育意义。

public static void main(String[] args)
{
    boolean cont = false;

          while (!cont)
        {
            addInputNumber();
            cont = tryAgain();
        }
}


  private static void addInputNumber ()
  {
    boolean valid;
    int total;
    int inputInt;
    @SuppressWarnings("resource")
    Scanner input = new Scanner(System.in);

    do
    {
        try
        {
            System.out.print("Enter a number(between 0 and 1000)");
            inputInt = input.nextInt();

            if(inputInt > 0 && inputInt < 1000)
                {
                    valid = true;

                    total = (inputInt % 10) + ((inputInt / 10) % 10) + (inputInt / 100);

                    System.out.println("\n" + "The total of " + inputInt + " is " + total);
                }

            else
                {
                    System.out.println("\n" + "ERROR---ENTER A NUMBER BETWEEN 0 AND 1000" + "\n");
                    valid = false;
                }
        }

        catch(InputMismatchException ex)
        {
            System.out.println("\n" + "ERROR---ENTER A NUMBER BETWEEN 0 AND 1000" + "\n");
            valid = false;
        }
    } while(!valid);
}

4 个答案:

答案 0 :(得分:0)

更改

 catch(InputMismatchException ex)
    {
        System.out.println("\n" + "ERROR---ENTER A NUMBER BETWEEN 0 AND 1000" + "\n");
        valid = true;
    }

答案 1 :(得分:0)

在catch块上,您的变量valid设置为false。 然后在代码上

while(!valid)

条件为真,循环无限

答案 2 :(得分:0)

你的do while循环必须以

结束
 while(valid);

因为,一旦你发现异常valid变为false,你可能想要在发现异常时退出循环

答案 3 :(得分:0)

方法tryAgain()有什么作用? 看起来它叫addInputNumber(),对吧?如果是这样,您不需要方法addInputNumber()中的循环。 我认为你的问题不是在catch块中做什么,而是程序结构。你正在使用两个循环,你可能只需要一个循环。你可以让addInputNumber()返回一个布尔值。