我是初学者,我不知道为什么我不能捕获NumberFormatException

时间:2016-03-10 19:31:45

标签: java

在我的简单程序(下面)中,只检查一个数字是奇数还是偶数,我想我已经测试了用户(我)可能做的所有事情,除非用户输入字符串或双重而不是numStr的整数。我尝试try{...}catch{...}但是捕获的内容并没有捕获到抛出的异常。

例如,如果输入“s”而不是整数,则会显示错误

java.lang.NumberFormatException: For input string: "s"

你能帮我吗?

import javax.swing.JOptionPane;

public class HowToUseJOptionPane
{
   public static void main (String[] args)
   {
     String numStr, result;
     int num, again = 1;

     do
     {
        try 
        {
           numStr = JOptionPane.showInputDialog("Enter an integer: ");
        }
        catch (NumberFormatException nfe)
        {
           System.out.println("Requires an integer, try again");
           again = 0;
           numStr = null;
        }
        while (numStr != null)
        {
           num = Integer.parseInt(numStr); //gets number
           result = "That number is " + ((num % 2 == 0) ? "even" : "odd");
           JOptionPane.showMessageDialog(null, result); //shows result
           //JOptionPane.YES_OPTION =0, no = 1, cancel = 2
           again = JOptionPane.showConfirmDialog(null, "Do another?");
           numStr = null;
        }
     } while (again == 0);
   }
}

3 个答案:

答案 0 :(得分:3)

您需要将try块放在解析位置:

    try 
    {
       num = Integer.parseInt(numStr); //gets number
    }
    catch (NumberFormatException nfe)
    {
    . . .

答案 1 :(得分:1)

你无法抓住NumberFormatException因为你在错误的地方寻找它。

调试这种情况的第一件事是检查哪种方法会引发感兴趣的异常。在这种情况下,这将是Integer.parseInt

确定方法后,请确保try / catch块包含感兴趣的方法调用。在您的情况下,它没有,这意味着您的代码不会捕获NumberFormatException异常。

将整个try / catch移到while循环中,以便它包含Integer.parseInt方法的调用将解决此问题。

答案 2 :(得分:0)

问题在于您尝试解析try catch块之外的数字。将它放在try catch块中。

try 
{
    numStr = JOptionPane.showInputDialog("Enter an integer: ");
    num = Integer.parseInt(numStr); //gets number
}