4

我正在制作一个简单的程序,可让您添加比赛结果,以及他们过去完成的秒数。所以要输入时间,我这样做了:

int time = Integer.parseInt(JOptionPane.showInputDialog("Enter seconds"));

所以我的问题是,如果用户输入的不是正数,我该如何向用户显示错误消息?就像 MessageDialog 一样,它会给你错误,直到你输入一个数字。

4

4 回答 4

11
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.");
    }
}
于 2013-01-16T13:53:10.653 回答
2

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);
于 2013-01-16T13:57:47.493 回答
1

如果JOptionPane.showInputDialog("Enter seconds")不是有效数字,您将得到NumberFormatException。对于正数检查,只需检查time >=0

于 2013-01-16T13:52:26.203 回答
0

取决于你想如何解决它。一种简单的方法是将时间声明为整数,然后执行以下操作:

Integer time;    
while (time == null || time < 0) {
    Ints.tryParse(JOptionPane.showInputDialog("Enter seconds"));
}

当然,这需要你使用谷歌番石榴。(其中包含许多其他有用的功能)。

另一种方法是使用上面的代码,但使用标准的 tryparse,捕获 NumberFormatException 并且在 catch 中什么都不做。

有很多方法可以解决这个问题。

或者不重新发明轮子,只使用: NumberUtils.isNumberStringUtils.isNumericfrom Apache Commons Lang

于 2013-01-16T13:56:02.540 回答