1. ホーム
  2. java

[解決済み] try catch ArrayIndexOutOfBoundsException?

2022-01-29 07:41:11

質問

私のプロジェクトは、寸法25×20のグリッド上を移動する小さなアイコンで構成されています。私はいくつかのif/elseブロックで簡単にこれを行うことができることを知っているが、私はエラー処理についてもっと学びたい。

私が考えていたのは try catch を使うことでしたが、これでは配列のインデックスが範囲外である例外や、配列のインデックスが範囲外である例外をキャッチできません。 Exception エラーやポジションを返さないので、catch ブロックに行くことはありません。

このような疑似コードを考えていました。

try {
    // Code
} catch(The exception) {
   x - 1 or + 1
}

実際のコード

 public void tick() {
    Random rand = new Random();
    try {
        int x, y;
        x = rand.nextInt(3) + (-1); //Slumpar fram en siffra (-1, 0, 1)
        y = rand.nextInt(3) + (-1); 
        setPosition(new Point((int)getPosition().getX()+x,(int)getPosition().getY() + y));
    } catch(Exception e) {
        System.out.println("error");
    }
    System.out.println("x: " + getPosition().getX());
    System.out.println("y: " + getPosition().getY());
}

public String type() {
    return "Dummy";
}

解決方法は?

あなたのコードのどこにも配列が見当たらないので、おそらくtryブロックが何もキャッチしていないのでしょう(呼び出されたメソッドのいずれかに配列があるのでしょうか)。また、プログラムが配列の境界の外側を読み取ることを許可してはいけません。これは悪い設計です。とはいえ、私が考える最も明確な方法で例外をキャッチする方法は次のとおりです。

try {
    array[index] = someValue;
}
catch(ArrayIndexOutOfBoundsException exception) {
    handleTheExceptionSomehow(exception);
}

あるいは、@Peerhenry が提案するように、インデックスが正しくない場合に新しい Exception を投げるようにすれば、より良い設計になるでしょう。