在我的简单程序(下面)中,只检查一个数字是奇数还是偶数,我想我已经测试了用户(我)可能做的所有事情,除非用户输入字符串或双重而不是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);
}
}
答案 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
}