【问题标题】:Confused on what to do after catching exception捕获异常后对做什么感到困惑
【发布时间】:2013-07-24 06:29:29
【问题描述】:

我对代码中的 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 块中将 valid 更改为 true。

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


【解决方案1】:

改变

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

【讨论】:

    【解决方案2】:

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

    while(!valid)
    

    条件为真,循环无限

    【讨论】:

      【解决方案3】:

      你的 do while 循环必须以

      结尾
       while(valid);
      

      因为一旦你捕捉到异常valid变成false,如果捕捉到异常你可能想退出循环

      【讨论】:

      • 抛出异常后是否正在迭代循环?
      • 我不会说它不好,除非你不能完全控制你在做什么。如果你有这样的要求,你必须这样做
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2022-07-18
        • 2021-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多