PrintStackTrace вызывает сбой моей программы. Зачем?
Я сделал простой код, и он должен был работать просто отлично. Проблема была, это не так. Мне потребовалось некоторое время, чтобы выяснить, что является причиной исключения числового формата. Видимо, когда я пытаюсь печатать буквы вместо цифр, он должен попросить меня снова ввести его, но он вылетает. Но когда я удаляю 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();
}
}
1 ответ
Я считаю, что ваша программа все еще работает. 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)`
Кроме того, вы можете не увидеть "Enter integer: "
после вывода отладки в качестве потока, в который он отправлен, System.err
, отдельно от System.out
Обычный печатный поток. Это означает, что иногда печати в System.err и System.out не всегда отображаются в том же порядке, в котором они были вызваны.
Все это говорит о том, что ваша программа, вероятно, все еще работает. Это просто похоже на аварию, так как e.printStackTrace()
печатает ту же информацию, которую вы получили бы в случае необработанного исключения, вызвавшего сбой.