我编写了一个程序,计算gcd(最大公因数)和lcm(最小公倍数)。一切正常,除了 try {...} catch(...) {...}
. 以下是代码中无法正常工作的部分:
try {
num1 = Integer.parseInt(sc.nextLine());
}
catch(Exception e) {
System.out.println("Your input is not an integer (number w/o decimals)! Try again.");
System.out.print("Enter your first number: ");
num1 = Integer.parseInt(sc.nextLine());
}
当我输入例如字母时,它会说:
Your input is not an integer (number w/o decimals)! Try again.
Enter your first number:
但当我第二次输入字母时,程序崩溃了:
Exception in thread "main" java.lang.NumberFormatException: For input string: "asdf"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
at java.base/java.lang.Integer.parseInt(Integer.java:658)
at java.base/java.lang.Integer.parseInt(Integer.java:776)
at GCDLCMgetter.main(GCDLCMgetter.java:56)
这可能是我犯的一个很简单的错误,但我想不出来。。。
谢谢您
4条答案
按热度按时间wydwbb8l1#
因为你的第二个提示在catch块里面。与其在catch块中再次提示,不如将整个代码段 Package 在一个循环中,以便它返回try块再次提示。比如:
carvr3hs2#
第二个parseint方法调用不在try-catch块中。这种逻辑需要使用循环。
koaltpgm3#
在您的代码中,它会执行两次:
读一行在
try{...}
有一个Exception
异常由catch(Exception e){...}
这个num1 = Integer.parseInt(sc.nextLine());
内部catch(Exception e){...}
无法处理。它没有放在里面try{}
.执行已完成,因为最后一个异常无法由任何
catch
.看来你用的是扫描器,我建议你用循环的方式:
如果您正在管理整数,那么使用scanner.nextint()会很有趣
qrjkbowd4#
当你第一次写信的时候,它就进入了
catch
阻止。显示错误消息。然后执行行num1 = Integer.parseInt(sc.nextLine());
再次输入字母,但这次没有try-catch
阻止来处理这个。所以它抛出了错误。