我试图让用户只输入一个非负数,如果用户关闭了对话框,程序应该终止。
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语句中的代码是死代码。
答案 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);
}