2

Android アプリで次のコードを取得しました。

Event[] events = retrieveEvents();
if (events != null && events.length>0) {
   int eventNr = getFromUserInput();
   eventNr = eventNr % events.length;
   Event event = events[eventNr];
}

retrieveEvents() はEventインターネットからいくつかの を取得するため、空またはnull. ユーザーはEvent、例外を回避するために表示するものを選択できます。モジュロ演算を使用して、eventNr範囲内にあることを確認します。これは、私がテストしたすべてのデバイスで正常に動作しますが:

最後から 2 行目 (配列アクセス) でArrayIndexOutOfBoundsException. これはどのように起こりますか?チェックを外した状態は何ですか?私のエラーはどこですか?

覚えておいてください:retrieveEvents()getFromUserInput()関数は両方とも無効なデータを返す可能性がありますが、すべてのケースをチェックしたと思います。

4

2 に答える 2

7

eventNrが負にならないことを確認しましたか? チェックは引用されたコードにはありません。問題は、たとえばeventNris-1events.lengthis 5 で-1 % 5 = -1あり、もちろんevents[-1]範囲外である場合です。

于 2010-11-19T13:58:20.453 に答える
2

これはスレッド化されたアプリケーションですか? retrieveEvents() が常に同じ配列への参照を返しているが、配列がリアルタイムで変更されている可能性はありますか? もしそうなら、それはあなたの問題かもしれません。

于 2010-11-19T14:00:53.797 に答える