尝试,在Java中捕获无限循环

时间:2012-10-15 05:15:13

标签: java exception

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

如果数字不正确,该块会捕获异常,当我输入-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 个答案:

答案 0 :(得分:2)

处理此问题的最佳方法可能是更改它以便读者获得下一行:

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

try{
    size = Integer.parseInt(input);
} catch(NumberFormatException e){ throw new Exception(); }

答案 1 :(得分:2)

将循环中的扫描仪初始化放在内部:

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");

        }    

    }

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我怀疑你是因为你正在投掷并抓住Exception而被抓住了。如果你将e.printStackTrace();添加到catch plock中,你可能会发现你正在捕获一个你不希望发生的异常...就像来自nextInt()调用,或NPE之类的东西

  • 不要抛出Exception。永远不会。如果没有适合的标准,请使用特定的例外情况,为自己创建一个例外。

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