Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-捕获多个异常并识别发生的异常_Java_Exception_Try Catch_Illegalargumentexception - Fatal编程技术网

Java-捕获多个异常并识别发生的异常

Java-捕获多个异常并识别发生的异常,java,exception,try-catch,illegalargumentexception,Java,Exception,Try Catch,Illegalargumentexception,我对这个标题有点困难,不知道如何更准确地表达它 我遇到了这个问题,我有几种方法要求用户输入3Doubleinput。 对于每个输入,它都会检查它是否有效(例如,如果是正值),如果不是,则抛出一个IllegalArgumentException。现在我创建了一个Tester类来检查这些方法是否正常工作。它应该捕获方法引发的异常,并重新询问用户导致该特定异常的输入 所有3个方法都会抛出和IllegalArgumentException,但每个方法的错误消息都不同。(捕获异常时)是否可以查看导致错误的

我对这个标题有点困难,不知道如何更准确地表达它

我遇到了这个问题,我有几种方法要求用户输入3
Double
input。 对于每个输入,它都会检查它是否有效(例如,如果是正值),如果不是,则抛出一个
IllegalArgumentException
。现在我创建了一个Tester类来检查这些方法是否正常工作。它应该捕获方法引发的异常,并重新询问用户导致该特定异常的输入

所有3个方法都会抛出和
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;
   }
}
因此,只有当
IllegalArgumentException
为“初始值不能为负”时,我必须在tester类中更改什么才能抛出该代码

对不起,我让你很难理解

编辑:根据我的教授,我们应该使用do

String error = e.toString;
if (error.contains("Added value cannot be negative.")
{
    //DO CODE FOR FIRST ERROR
}

但是我知道这不是最合适的方法。

用自己的try/catch块围绕每个方法调用?

因为你不能像在函数式语言中那样匹配字符串,如果你想使用try-catch机制来区分它们,你必须提供三种不同类型的对象

或者使用一种简化的方法将一个参数附加到异常,这样您就可以只使用
catch
子句,但您的行为可能会有所不同。差不多

class MyIllegalArgumentException extends IllegalArgumentException {
  public int whichParameter;

  public MyIllegalArgumentException(String string, int which) {
    super(string);
    whichParameter = which;
  }
}
现在您可以:

catch (MyIllegalArgumentException e) {
  if (e.whichParameter == 0)
    ..
  else if (e.whichParameter == 1)
    ..
}
您也可以检查字符串是否相等,但这确实不是一个好的设计选择,您也可以有许多try-catch块,但这并不总是可能的

扩展代码后,解决方案很简单:

public static void main(String[] args) {
  try {
    double initialValue = ...
    account acc = new account(initialValue);
   } catch (IllegalArgumentException e) {
     ...
   }

   try {    
     double addValue = ...
     acc.add(addValue);
   } catch (Exception e) {
         System.out.println("Wrong ammount");
         initialValue = Double.parseDouble(JOptionPane.showInputDialog("Re-enter ammount"));
   }
 }

在catch块中,您应该只捕获IllegalArgumentException。然后,您可以调用
getMessage()
函数,这将使您能够执行一个非常简单的String.equals调用。

因此,要澄清的是,代码中可能会抛出
illegargumentexception
还有其他原因吗?除了“初始值不能为负”之外?我相信有一种更简单的方法,但您可以创建自己的异常类,该类继承自IllegalArgumentException
getMessage()
Ew。试图解析异常消息以识别它有异味。您可以控制引发异常的代码吗?您可以让它引发子异常类型吗?@prelic是的,只是稍微扩展了代码以使其更清晰。@LouisWasserman遗憾的是没有:(,此时我只能编辑tester类。@Chris完全正确。在tester类中执行此操作。
public static void main(String[] args) {
  try {
    double initialValue = ...
    account acc = new account(initialValue);
   } catch (IllegalArgumentException e) {
     ...
   }

   try {    
     double addValue = ...
     acc.add(addValue);
   } catch (Exception e) {
         System.out.println("Wrong ammount");
         initialValue = Double.parseDouble(JOptionPane.showInputDialog("Re-enter ammount"));
   }
 }