2014-07-03 97 views
-1

所以我在看一些教程,其中一些人使用Java在GUI中添加两个数字,但我想这样做,以便如果有人将单词而不是数字,它会给他们一个错误消息说,它期望数字不是一个字。我该如何为这段代码添加if then语句?

public static void main(String args[]){ 

    String fn = JOptionPane.showInputDialog("Enter First Number"); 
    String sn = JOptionPane.showInputDialog("Enter First Number"); 

    int num1 = Integer.parseInt(fn); 
    int num2 = Integer.parseInt(sn);  

    int sum = num1 +num2; 

    JOptionPane.showMessageDialog(null, "The answer is" +sum, "Title", JOptionPane.PLAIN_MESSAGE); 
} 
+1

如果无法解析String值,则'Integer.parseInt'将抛出'NumberFormatException'。你可以使用'try-catch'模块来捕获这种情况并显示错误信息 – MadProgrammer

回答

0

您可以将其更改为以下内容:

try{ 
     int num1 = Integer.parseInt(fn); 
     int num2 = Integer.parseInt(sn); 
} 
    catch(Exception e) { 
console.log(There was an exception) 

更多信息,请参阅本文档 http://docs.oracle.com/javase/tutorial/essential/exceptions/try.html

+0

最好是赶上你知道要处理的实际异常,而不是盲目地捕获所有异常 – MadProgrammer

+0

@MadProgrammer能否请你解释一下你这意味着我可以学习吗?谢谢 –

+2

'Integer.parseInt'抛出'NumberFormatException',这是“预期”的可能性,你应该尽力去处理这个特定的情况,任何其他异常都应该抛出调用链(例如'NullPointerException')。你应该只处理你知道/期望的情况 - 恕我直言 – MadProgrammer

0

parseInt的JavaDoc中表示当String不是NumberFormatException抛出一个有效的号码。您可以简单地捕捉异常并重试输入。有很多方法可以实现重试逻辑。

两种可能的方法是:

  • 在while循环(isValidInput),直至用户输入有效的号码使用一个布尔值。
  • 打破parseInt在您的异常catch块中发生的标签。
+1

恕我直言标签是邪恶的,应该不惜一切代价避免 – MadProgrammer

+0

你能告诉我什么恕我直言是什么? –

+0

我同意@MadProgrammer - 我不会选择去那条路线 –

1

当paseInt使用数字格式异常时,您可以捕获单词。不要忘记导入也;

public static void main(String args[]){ 

    String fn = JOptionPane.showInputDialog("Enter First Number"); 
    String sn = JOptionPane.showInputDialog("Enter First Number"); 
    try{ 
    int num1 = Integer.parseInt(fn); 
    int num2 = Integer.parseInt(sn); 
    int sum = num1 +num2; 


    } catch (NumberFormatException err) {  
    JOptionPane.showMessageDialog(null,"words not allow"); 
    } 





} 
+1

你还应该添加,使用异常来控制逻辑流程通常不是一个好主意,只是说;) – MadProgrammer