我有一个应该处理Exception的java程序,但最终结果远非我想要的那样。这是我的程序的整体想法:它应该接受零输入并退出程序。输入对话框应该导致应该捕获的异常并打印消息“坏号”。
我的大脑告诉我,我在catch块中缺少一行代码。
这是我的代码:
import javax.swing.JOptionPane;
public class exceptTest {
public static void main(String[] args){
try {
String line = JOptionPane.showInputDialog(null, "enter number");
if(line.equals ("0"));
System.exit(0);
}catch(Exception e){
JOptionPane.showMessageDialog(null, "bad number");
}
}
}
答案 0 :(得分:1)
你在这里没有捕获异常,你只是在制作一个if语句,你只需要使用if / else。
try{
String line = JOptionPane.showInputDialog(null, "enter number");
if(line.equals ("0")){
System.exit(0);
}else{
JOptionPane.showMessageDialog(null, "bad number");
}
}catch (Exception ex){
ex.printStackTrace();
}
你只能用于任何异常showInputDialog()抛出的捕获,但对于你的数字检查你没有捕获任何东西,它只是不是0.
答案 1 :(得分:1)
您不会执行异常处理代码,因为您从不抛出异常。代码将执行输入,然后测试输入等于“0”,然后根据它将显示或不显示对话框,然后它将执行。
抛出异常是因为某些事情发生在代码将处理的条件之外,或者是因为你明确地抛出一个异常。
通过“在条件之外”等,我的意思是除以0之类的东西.Java(也没有任何其他语言)会处理它,并且会抛出异常。程序处理的正常步骤将停止,并将调用执行处理程序。
在您的情况下,如果您(例如)尝试将输入解析为数字,但输入不是数字,则会出现异常。这是与您想要的功能不同的功能,但它更好地说明了异常的用途。像
这样的东西try
{
int numberEntered = Integer.parse(line);
JOptionPane.showMessageDialog(null, "Entered a number, parsed to " + numberEntered);
}
catch (NumberFormatException nfe)
{
JOptionPane.showMessageDialog(null, "Did not enter a number, but <" + line + ">");
}
显示了异常通常有用的东西。
如果你愿意,你可以定义一个异常,称之为BadNumberException,并将其抛入你拥有的代码中 - 你会把它(我猜)放在if语句的else子句中。但是你的例程会抛出异常,我认为引发异常的例程也会异常捕获它。
希望有所帮助。 RC
答案 2 :(得分:0)
在if语句后面有一个分号,它会终止该行,编译器不会查找if的其余部分。删除你的分号,它会正常工作。
import javax.swing.JOptionPane;
public class exceptTest
{
public static void main(String[] args){
try
{
String line = JOptionPane.showInputDialog(null, "enter number");
if(line.equals ("0")) //semi-colon removed here
{
System.exit(0);
}
throw new IllegalArgumentException("Input was not 0");
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null, "bad number");
}
}
}
答案 3 :(得分:0)
如果输入不等于0,则代码不会抛出异常。因此,您永远不会捕获任何内容,因此屏幕上不会显示错误消息。
你可以做两件事:
- 如果输入不为0则抛出异常(然后你将进入捕获)
或
- 使用显示错误消息的else
if
(然后您不需要try-catch来检查输入是否为0)
编辑:当然,正如Hunter McMillen所注意到的,你需要在if语句后删除分号。