繁体   English   中英

捕获异常后该怎么办

[英]Confused on what to do after catching exception

我对代码中的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块上,将有效变量设置为false。 然后在代码上

while(!valid)

条件为真,循环无限长

您的do while循环必须以

 while(valid);

因为,一旦捕获到异常, valid就会变为false ,如果捕获到异常,您可能希望退出循环

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM