我正在制作一个简单的程序,可让您添加比赛结果,以及他们过去完成的秒数。所以要输入时间,我这样做了:
int time = Integer.parseInt(JOptionPane.showInputDialog("Enter seconds"));
所以我的问题是,如果用户输入的不是正数,我该如何向用户显示错误消息?就像 MessageDialog 一样,它会给你错误,直到你输入一个数字。
int time;
try {
time = Integer.parseInt(JOptionPane.showInputDialog("Enter seconds"));
} catch (NumberFormatException e) {
//error
}
Integer.parseInt
如果NumberFormatException
它无法解析int
. 如果您只想在输入无效时重试,请将其包装在这样的while
循环中:
boolean valid = false;
while (!valid) {
int time;
try {
time = Integer.parseInt(JOptionPane.showInputDialog("Enter seconds"));
if (time >= 0) valid = true;
} catch (NumberFormatException e) {
//error
JOptionPane.showConfirmDialog("Error, not a number. Please try again.");
}
}
Integer.parseInt 当 Integer.parseInt 的参数不是整数时抛出 NumberFormatException,使用 try Catch 并显示所需的错误消息,将其保留在 do while 循环中,如下所示
int time = -1;
do{
try{
time = Integer.parseInt(JOptionPane.showInputDialog("Enter seconds"));
}
catch(NumberFormatException e){
}
}while(time<=0);
如果JOptionPane.showInputDialog("Enter seconds")
不是有效数字,您将得到NumberFormatException
。对于正数检查,只需检查time >=0
取决于你想如何解决它。一种简单的方法是将时间声明为整数,然后执行以下操作:
Integer time;
while (time == null || time < 0) {
Ints.tryParse(JOptionPane.showInputDialog("Enter seconds"));
}
当然,这需要你使用谷歌番石榴。(其中包含许多其他有用的功能)。
另一种方法是使用上面的代码,但使用标准的 tryparse,捕获 NumberFormatException 并且在 catch 中什么都不做。
有很多方法可以解决这个问题。
或者不重新发明轮子,只使用:
NumberUtils.isNumber
或StringUtils.isNumeric
from Apache Commons Lang
。