2011-03-30 43 views
1

我写了一个代码来检查各种条件。java中的例外

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

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

这里是我的代码部分:

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"); 
     } 
} 

}

回答

9

引发异常的方法是

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

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

我会rearrrange你的代码虽然首先检查了先决条件,然后继续,如果一切都很好 - 我觉得这更容易阅读:

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; 

(事实上,我甚至会喜欢提取的前提检查到一个单独的方法 - 但我把这个给你。)

+1

+1为可读性部分。 – Bozho 2011-03-30 22:12:28

+0

我永远不会将先决条件提取到单独的方法中,因为我认为只需向上滚动以查看参数是如何调节的更方便。尽管如此,你应该用注释来标记它。至少这就是我所做的。 – brimborium 2013-03-05 11:12:53

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); 
    } 
} 
+0

我会犹豫是否与使它一个检查的异常。 – Bozho 2011-03-30 22:04:50

+0

是的。确实如此。忘了那个。 – RoflcoptrException 2011-03-30 22:05:10

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

java.langIllegalArgumentExceptionRuntimeException,这意味着一些参数不是因为它们是预计会。因为它是一个unchecked异常,来电者不是被迫接受以任何方式(而不是检查的异常)

2

如果异常是一些关于你的论点是非法的,然后抛出一个IllegalArgumentException

throw new IllegalArgumentException("descriptive message") 
2

你可能想看看Oracle's tutorials on exceptions

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

要标记的是,方法可以抛出异常,使用throws关键字,像

public static void foo() throws SomeException 
1

你可以抛出的异常与这条线

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

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

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

为见Oracle tutorial更多