0

我真的不知道这个问题...

如果数字不正确,该块会捕获异常,当我输入 -1 或 0 时,它会捕获异常并要求我再次输入数字......但如果我输入类似 asdasd 的内容,它将运行一个无限循环。

while (true){

            try{

                System.out.println("-Size of the array: ");        
                size = read.nextInt();      

                if(size<=0){

                    throw new Exception();

                }else{

                    break;    

                }


            }            
            catch(Exception e){

                System.out.println("\n-Wrong input. Try again.\n");

            }    

        }
4

4 回答 4

2

将 Scanner 初始化放在 while 循环中:

while (true){

        try{
            Scanner read = new Scanner(System.in);
            System.out.println("-Size of the array: ");        
            size = read.nextInt();      

            if(size<=0){

                throw new Exception();

            }else{

                break;    

            }


        }            
        catch(Exception e){

            System.out.println("\n-Wrong input. Try again.\n");

        }    

    }
于 2012-10-15T05:53:29.347 回答
2

处理这个问题的最好方法可能是改变它,以便读者得到下一行:

String input = read.nextLine();
if(input.length() == 0) { continue; }

try{
    size = Integer.parseInt(input);
} catch(NumberFormatException e){ throw new Exception(); }
于 2012-10-15T05:25:26.043 回答
0

我的猜测是 read.nextInt 抛出异常,因为“asdasd”不是整数。这将导致您的异常处理程序运行并打印消息。但是,因为您的异常处理程序中没有“中断”,所以循环将再次运行......再次......

于 2012-10-15T05:39:24.130 回答
0

我怀疑你被抓住了,因为你在投掷和接球Exception。如果您添加e.printStackTrace();到 catch plock 中,您可能会发现您正在捕获一个您不希望发生的异常......比如来自nextInt()调用的异常,或者 NPE 或其他东西。

  • 不要扔Exception。永远不会。使用一个特定的例外,如果没有一个标准是合适的,则为您自己创建一个。

  • Exception除非您准备好应对所有可能性,否则不要抓住。这包括所有那些由于代码中的随机错误而导致的意外未经检查的异常。

于 2012-10-15T06:16:40.993 回答