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