我刚刚开始关于异常处理的课程,但不确定自己的代码做错了什么—我的目标是创建一个UI,该UI询问用户他们拥有多少只宠物,并检查如果输入是整数。谁能指出出什么问题了?
我已经尝试过将label.setText()用于消息,并且还更改了我使用的异常(我尝试了NumberFormat)。
这是我使用的代码块(这是我第一次遇到EH,所以我觉得这个主题有点令人困惑)
String value = input.getText();
int intval = 0;
intval = Integer.parseInt(value);
try {
if (0 >= intval) {
throw new IllegalArgumentException();
}
else
throw new InputMismatchException();
}
catch(IllegalArgumentException e)
{
String outputMessage = "The number must be an integer no less than 0!";
label1.setText(outputMessage);
}
catch(InputMismatchException i) {
System.out.println("Please enter an integer.");
System.out.println("You entered: " + intval);
}
finally
{
System.out.println("You own " + intval + " pets.");
}
我要包括的例外情况是,如果用户输入了其他数字类型而不是整数,并且用户输入了负整数而不是正整数1或0。我的代码运行了,但是try-catch块没有运行不能真正起作用。
答案 0 :(得分:1)
看起来这段代码有很多缺陷!首先,如果您将输入作为整数,则不应该将输入作为String,您可以引发InputMismatchException,通过将输入作为输入,您可以很容易地告诉用户说“仅输入整数值”字符串,您将无法执行此操作。 不要使用finally块,因为无论您的代码引发了多少异常,都将执行finally块。即使您最后输入了-1(在执行代码时),它也会显示“您有-1 pets:”消息,因为最后执行块无关紧要! 我重构了代码以使其以相同的方式工作
Scanner input = new Scanner(System.in);
boolean exceptionHit = false;
int value = 0;
try {
value = input.nextInt();
if (value <= 0) {
throw new IllegalArgumentException();
}
}
catch (IllegalArgumentException e) {
String outputMessage = "The number must be an integer no less than 0!";
label1.setText(outputMessage);
exceptionHit = true;
} catch (InputMismatchException i) {
System.out.println("Please enter an integer.");
exceptionHit = true;
}
if (exceptionHit == false)
System.out.println("You have " + value + " pets");
我已删除了finally块,因此不会每次都显示最后一条消息!我添加了一个布尔值而不是布尔值,如果遇到任何异常,它将设置为true。