Java I';我是个初学者,我不知道为什么我能';t捕获数字格式异常

Java I';我是个初学者,我不知道为什么我能';t捕获数字格式异常,java,Java,在我的简单程序(如下)中,我只是检查一个数字是奇数还是偶数,我想我已经测试了用户(我)可能做的所有事情,除非用户为numStr输入一个字符串或double而不是整数,否则一切都正常。我试图try{…}和catch{…}但是catch没有捕获抛出的异常 例如,如果我输入“s”而不是整数,则会显示一个错误 java.lang.NumberFormatException: For input string: "s" 你能帮帮我吗 import javax.swing.JOptionPane; pu

在我的简单程序(如下)中,我只是检查一个数字是奇数还是偶数,我想我已经测试了用户(我)可能做的所有事情,除非用户为numStr输入一个字符串或double而不是整数,否则一切都正常。我试图
try{…}
catch{…}
但是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);
   }
}

问题是您试图在try-catch块之外解析数字。将其放在试抓块内

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

问题是您试图在try-catch块之外解析数字。将其放在试抓块内

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

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

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

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

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

您无法捕获
NumberFormatException
,因为您在错误的位置查找它

要调试这样的情况,首先要检查哪个方法会抛出感兴趣的异常。在本例中,这将是
整数.parseInt

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


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

您无法捕获
NumberFormatException
,因为您在错误的位置查找它

要调试这样的情况,首先要检查哪个方法会抛出感兴趣的异常。在本例中,这将是
整数.parseInt

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


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

扩大范围。捕获所有异常,然后让您的catch块吐出您捕获的异常类型。也许这并不是抛出数字格式异常。。。或者引发一个异常,该异常来自num=Integer.parseInt(numStr)//获取数字。它不在捕捉区内。扩大范围。捕获所有异常,然后让您的catch块吐出您捕获的异常类型。也许这并不是抛出数字格式异常。。。或者引发一个异常,该异常来自num=Integer.parseInt(numStr)//获取数字。它不在抓块里。