【发布时间】:2012-03-03 03:00:37
【问题描述】:
我对标题有一些困难,不知道如何更准确地表达它。
我遇到了这个问题,我有几种方法可以要求用户输入 3 个Double。
对于每个输入,它检查它是否有效(例如,如果它是一个正值),如果不是,它会抛出一个IllegalArgumentException。现在我创建了一个 Tester 类来检查方法是否正常工作。它应该捕获方法抛出的异常并重新询问用户导致该特定异常的输入。
所有 3 种方法都 throw 和 IllegalArgumentException,但每个方法的错误消息都不同。无论如何(在捕获异常时)查看哪个输入导致错误?这是我的代码示例:
public class account
{
double value;
public account(double initialValue)
{
if (initialValue < 0)
{
throw new IllegalArgumentException("Initial value cannot be negative.");
}
value = initialValue;
}
public add(double addValue)
{
if (addValue < 0)
{
throw new IllegalArgumentException("Added value cannot be negative.");
}
value = value + addValue;
}
}
测试器类会是这样的:
public class accountTester
{
public static void main(String[] args)
{
try
{
double initialValue = Double.parseDouble(JOptionPane.showInputDialog("Enter initial value"));
account acc = new account(initialValue);
double addValue = Double.parseDouble(JOptionPane.showInputDialog("Enter value to add"));
acc.add(addValue);
} catch (Exception e) {
System.out.println("Wrong ammount");
initialValue = Double.parseDouble(JOptionPane.showInputDialog("Re-enter ammount"));
}
}
那么只有当IllegalArgumentException 是“初始值不能为负”时,我必须在测试器类中进行哪些更改才能抛出该代码。
对不起,如果我让这个难以理解。
编辑:根据我的教授,我们应该使用 do
String error = e.toString;
if (error.contains("Added value cannot be negative.")
{
//DO CODE FOR FIRST ERROR
}
我知道这不是最合适的做法。
【问题讨论】:
-
所以澄清一下,
IllegalArgumentException可能会出现在您的代码中是否还有其他原因?除了“初始值不能为负”之外?我确信有一种更简单的方法,但您始终可以创建自己的异常类,该类继承自 IllegalArgumentException。 -
docs.oracle.com/javase/6/docs/api/java/lang/Throwable.html -
getMessage() -
Ew。试图解析异常消息以识别它是臭的。你对抛出异常的代码有控制权吗,能不能让它抛出一个子异常类型?
-
@prelic 是的,只是稍微扩展了代码以使其更清晰。
-
@LouisWasserman 不幸的是没有:(,我现在只能编辑测试器类。
标签: java exception try-catch illegalargumentexception