我编写了一些简单的代码,它应该可以正常工作。问题是,事实并非如此。我花了一些时间才弄清楚数字格式异常的原因是什么。显然,当我尝试输入字母而不是数字时,它应该要求我重新输入,但它崩溃了。但是当我删除 e.printStackTrace(); 时它工作得很好。谁能告诉我为什么?
import java.util.Scanner;
public class Test {
public static boolean isInteger(String strNumber) {
try {
int number = Integer.parseInt(strNumber);
if(number > 0) {
return true;
}
return false;
} catch (NumberFormatException e) {
e.printStackTrace();
return false;
}
}
public static void main(String[] args) {
String numberString = null;
int number = 0;
Scanner scanner = new Scanner(System.in);
do {
System.out.println("Enter integer:");
numberString = scanner.nextLine();
} while(!isInteger(numberString));
number = Integer.parseInt(numberString);
System.out.println("Your number is: " + number);
scanner.close();
}
}
最佳答案
我相信你的程序仍在运行。 e.printStackTrace()
显示的输出类型与未捕获异常时程序的输出类型相同。
示例:
`java.lang.NumberFormatException: For input string: "asdf"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Test.isInteger(Test.java:7)
at Test.main(Test.java:29)`
此外,您可能在调试输出后看不到 “输入整数:”
,因为它发送到的流 System.err
与 是分开的System.out
,常规打印流。这意味着有时,System.err 和 System.out 的打印并不总是按照调用它们的顺序出现。
所有这些都表明您的程序可能仍在运行。它看起来像是崩溃,因为 e.printStackTrace()
打印的信息与在未捕获的异常导致崩溃时获得的信息相同。
关于java - PrintStackTrace 导致我的程序崩溃。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50183059/