对捕捉到异常后该怎么办感到困惑



在代码中的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);
}

更改

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

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

while(!valid)

条件将为true,循环将无限

do-while循环必须以结束

 while(valid);

因为,一旦捕捉到异常,valid就会变成false,如果捕捉到异常则可能需要退出循环

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

最新更新