检查Integer是否为null时的NumberFormatException

时间:2017-09-28 21:10:31

标签: java

我试图让用户只输入一个非负数,如果用户关闭了对话框,程序应该终止。

        Integer num = Integer.parseInt(JOptionPane.showInputDialog("Enter a positive number"));
    if (num == null)
    {
        System.exit(0);
    }
    else if (num < 0)
    {
        num = Integer.parseInt(JOptionPane.showInputDialog("Enter a positive number"));
    }

如果num是String类型,但是当我将其更改为整数时,此代码有效。 当我尝试运行它时,我得到一个NumberFormatException,并且if语句中的代码是死代码。

3 个答案:

答案 0 :(得分:1)

parseInt如果传递null / invalid字符串,则不返回null,它会引发异常,您需要捕获该异常。

int num;
for (;;) {
    String input = JOptionPane.showInputDialog("Enter a positive number");
    if (input == null) System.exit(0);

    try {
        num = Integer.parseInt(input);
        break;
    } catch (NumberFormatException e) {
        // continue;
    }
}

答案 1 :(得分:0)

问题是函数showInputDialog如果退出则返回一个空字符串,或者如果输入没有用于修复它,那么你可以查看输入是否为空,看看这段代码:

num = (str.equals(""))?null:Integer.parseInt(str);

最好使用do{}while();循环来获得更有效的代码示例:

    String str;
    Integer num;
    do{
        str = JOptionPane.showInputDialog("enter a positive number");
        num = (str.equals(""))?null:Integer.parseInt(str);
        if(num == null){
            System.exit(0);
        }
    }while(num<0);

答案 2 :(得分:0)

NFE - 表示您的字符串不是数字,因此您需要捕获错误并决定在不合适的字符串的情况下该怎么做,例如。

  try {
        if (Integer.parseInt("-123") < 0) {
            // do job
        }
    } catch (NumberFormatException e) {
        // string is not a number
        // set value to default, log error, return error to users view
        System.exit(9);
    }
相关问题