1

我写了一个检查各种条件的代码。

如果它满足条件,它会做它应该做的,否则我希望它抛出一个异常。

有什么特殊的语法吗?否则,由于前置条件,编译器希望我返回任何我不想返回的数组。

这是我的代码的一部分:

public static int [] code(int[]arr){
    if ((arr!=null)&&(chack4and5(arr))&&(arr[arr.length-1]!=4)&&(TwoFours(arr))){
        int k=0;
        for(int i = 0; i<=arr.length-1; i++){
            if (arr[i] == 4){
                int place= pos(arr,k);
                arr[place]=arr[i+1];
                arr[i+1]=5;
                k=k+3;  
            }
        }
        return arr;
    }
    else { 
        System.out.println("Please enter a legal array which matches the pre- conditions");
        }
}

}

4

6 回答 6

9

抛出异常的方法是

throw new IllegalArgumentException(
        "Please enter a legal array which matches the pre- conditions");

IllegalArgumentException是一个适合当前情况的 Java 运行时异常,当然你可以选择另一个,或者创建和使用你自己的类型。唯一的限制是它必须是java.lang.Exception.

我会重新安排您的代码以先检查先决条件,然后在一切正常的情况下继续 - 我发现这更具可读性:

if (arr == null || !chack4and5(arr) || arr[arr.length-1] == 4 || !TwoFours(arr)) {
  throw new IllegalArgumentException(
        "Please enter a legal array which matches the pre- conditions");
}
int k=0;

for(int i = 0; i<=arr.length-1; i++){
    if (arr[i] == 4){
        int place= pos(arr,k);
        arr[place]=arr[i+1];
        arr[i+1]=5;
        k=k+3;
    }
}
return arr;

(事实上​​,我什至更愿意将前置条件检查提取到一个单独的方法中——但我把这个留给你。)

于 2011-03-30T22:03:23.647 回答
5
throw new IllegalArgumentException(
   "Please enter a legal array which matches the pre- conditions")

java.langIllegalArgumentException是 aRuntimeException这意味着某些论点与预期的不同。由于它是未经检查的异常,因此您的调用者不会被迫以任何方式处理它(与检查的异常相反)

于 2011-03-30T22:02:19.170 回答
3

您可以自己抛出异常。也许最好的方法是定义一个自定义异常然后抛出它。如果您不想这样做,请使用 IllegalArgumentException。

这是一个自定义异常的示例:

public static int [] code(int[]arr) {
        if ((arr!=null)&&(chack4and5(arr))&&(arr[arr.length-1]!=4)&&(TwoFours(arr))){
            int k=0;
            for(int i = 0; i<=arr.length-1; i++){
                if (arr[i] == 4){
                    int place= pos(arr,k);
                    arr[place]=arr[i+1];
                    arr[i+1]=5;
                    k=k+3;
                }
            }
            return arr;
        }
        else { 
           throw new MyException("No legal array");
        }
    }
}

这里是您的自定义异常:

public class MyException extends Exception {
   public MyException(String message) {
      super(message);
   }
}
于 2011-03-30T22:01:40.423 回答
2

如果异常是关于您的参数的某些内容是非法的,则抛出IllegalArgumentException

throw new IllegalArgumentException("descriptive message")
于 2011-03-30T22:02:32.293 回答
2

您可能想查看Oracle 的异常教程

要抛出异常,请使用throw关键字。

要标记方法可能引发异常,请使用throws关键字,例如

public static void foo() throws SomeException
于 2011-03-30T22:02:38.067 回答
1

你可以用这条线抛出异常

throw new SomeKindOfException("Exception description"); // or any other exception, also yours...

但是您需要在方法声明中指定:

 public static int [] code(int[]arr) throws SomeKindOfException{

有关更多信息,请参阅Oracle 教程

于 2011-03-30T22:04:23.963 回答