2

我做了一些简单的代码,它应该工作得很好。问题是,它没有。我花了一些时间弄清楚数字格式异常的原因是什么。显然,当我尝试输入字母而不是数字时,它应该要求我再次重新输入,但它崩溃了。但是当我删除 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();
   }

}
4

1 回答 1

3

我相信您的程序仍在运行。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()打印的信息与在导致崩溃的未捕获异常事件中获得的信息相同。

于 2018-05-04T21:53:01.533 回答