配列の場所が範囲外かどうかを確認しようとしていますが、最も簡単な方法は何ですか?
int[] arr;
populate(arr);
if(arr[-1] == null)
//out of bounds!
このようなものは機能しますか?
私はこれがtrycatchまたはスキャナーでできると確信していますが、単純な小さなプログラムのために、別の方法がありますか?
絶対にしないこれにはtry-catchを使用します。単に使用します:
_boolean inBounds = (index >= 0) && (index < array.length);
_
Try-catchを使用してアプローチを実装すると、 ArrayIndexOutOfBoundsException
をキャッチする必要があります。これは、チェックされない例外です(つまり、 RuntimeException
のサブクラス)。そのような例外は決して(または、少なくともveryめったに)キャッチされて対処されるべきではありません。代わりに、それらはそもそも防止されるべきです。
言い換えると、未チェックの例外は、プログラムが回復は期待されないの例外です。さて、これには例外があるかもしれません(しゃれはありません)。たとえば、Integer.parseInt()
を呼び出して潜在的なNumberFormatException
(未チェック)をキャッチすることで、文字列が整数としてたとえられるかどうかをチェックするのが一般的な方法になりました。これは問題ありませんが、そのようなことを行う前に常によく考えてください。
いいえ、例外が発生します。
代わりに、する
if (x < 0 || x >= arr.length) {
//x is out of bounds!
}
インデックスが手動で範囲内にあるかどうかを確認することをお勧めします。
if(index >=0 && index < array.length){
// in range
}
チェックされていない例外、つまりtry-catchブロックを必要としない例外はキャッチされません。 ArrayIndexOutOfBoundsException
はそれらの1つです。
チェックされていない例外はすべてRuntimeException
クラスに由来します。
このクラスからIndexOutOfBoundsException
が生成されます
これは、StringIndexOutOfBounds
およびArrayIndexOutOfBounds
にさらに特化されています
RuntimeExceptionは、Java仮想マシンの通常の操作中にスローできる例外のスーパークラスです。
RuntimeExceptionとそのサブクラスは未チェックの例外です。メソッドまたはコンストラクターの実行によってスローされ、メソッドまたはコンストラクターの境界外に伝播できる場合、チェックされていない例外をメソッドまたはコンストラクターのthrows節で宣言する必要はありません。