我真的不知道这个问题......
如果数字不正确,该块会捕获异常,当我输入-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");
}
}
答案 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
。这包括由于代码中的随机错误而导致的所有意外未经检查的异常。