2013-01-16 116 views
4

我正在制作一个简单的程序,让您添加比赛的结果以及他们用来完成的时间。所以进入的时候,我这样做:在Java中,如何检查输入是否是数字?

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

所以我的问题是,我怎么能当他进入比正数以外的东西显示错误信息给用户?就像MessageDialog一样,直到你输入一个数字才会给你错误。

+3

@PradeepSimha你有问题。你使用正则表达式。现在你有两个问题。 – Doorknob

+0

请添加更多标签。你在使用Swing吗? – gaborsch

+3

如果它是一个整数秒,为用户提供一个带有'SpinnerNumberModel'的'JSpinner',如[本答案]所示(http://stackoverflow.com/questions/9344708/jcombobox-to-list-age/ 9345991#9345991)。 –

回答

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."); 
    } 
} 
+0

@阿德里安洛佩兹啊,谢谢。没有注意到。 – Doorknob

+0

您现在精心编写的代码与'input.matches(“\\ d +”)'完全一样。我真的不明白这个最简单的正则表达式比你的精心设计的方案有多少问题,这个方案涉及到定期流量控制的例外,这是一个明显的代码异味。 –

+1

@MarkoTopolnik一方面,我的“精心制作”的代码是11行,其中四个实际上做了一些事情。另外,在你的方法中,你还必须添加一个'while'循环,新'输入'变量等。抛开精细程度,我认为这是一种非常有效的方法来教授新的Java程序员关于异常等等。 – Doorknob

1

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

0

取决于你想如何解决它。 一个简单的方法是申报时间为整型,只是做:

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

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

另一种方法是使用上面的代码,但使用标准tryparse,捕获NumberFormatException并在catch中不做任何事情。

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

或不重新发明轮子,只是使用: NumberUtils.isNumberStringUtils.isNumericApache Commons Lang

2

的Integer.parseInt抛出NumberFormatException异常时参数的Integer.parseInt不是一个整数,使用尝试捕捉和显示所需的错误信息,保存在do while循环,如下

int time = -1; 
    do{ 
     try{ 
      time = Integer.parseInt(JOptionPane.showInputDialog("Enter seconds")); 
     } 
     catch(NumberFormatException e){ 

     } 
    }while(time<=0); 
相关问题