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は、RuntimeException一部の引数が期待どおりでないことを意味します。これはチェックされていない例外であるため、呼び出し元は (チェックされた例外とは対照的に) 何らかの方法でそれを処理することを強制されません。

于 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 に答える