PrintStackTrace вызывает сбой моей программы. Зачем? - PullRequest
0 голосов
/ 05 мая 2018

Я сделал простой код, и он должен был работать нормально. Проблема была, это не так. Мне потребовалось некоторое время, чтобы выяснить, что является причиной исключения числового формата. Видимо, когда я пытаюсь набирать буквы вместо цифр, он должен попросить меня снова ввести его, но он вылетает. Но когда я удаляю 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 Ответ

0 голосов
/ 05 мая 2018

Я считаю, что ваша программа все еще работает. 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() печатает ту же информацию, которую вы получили бы в случае необработанного исключения, вызвавшего сбой.

...