0

以下のコードに arrayoutofindexexception があります。

    ImageView[] bObject = new ImageView[9];

    private void getCorrectObject() {

    List<Integer> objects = new ArrayList<Integer>();
    objects.add(1);
    objects.add(2);
    objects.add(3);
    objects.add(4);
    objects.add(5);
    objects.add(6);
    objects.add(7);
    objects.add(8);
    objects.add(9);

    Collections.shuffle(objects);
    int correctObject =  objects.get(0);
    Log.d("test", String.valueOf(correctObject));

            bObject[correctObject + 1].setImageResource(R.drawable.stage1_4_object1);
    bObject[correctObject + 1].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
                goToNextQuestion();
            }
        });
            }


           //TODO initControls
private void initControls() {

    bObject[0] = (ImageView) findViewById(R.id.bObject1Stage1_4);
    bObject[0].setImageResource(R.drawable.stage1_4_object2);
    bObject[1] = (ImageView) findViewById(R.id.bObject2Stage1_4);
    bObject[1].setImageResource(R.drawable.stage1_4_object2);
    bObject[2] = (ImageView) findViewById(R.id.bObject3Stage1_4);
    bObject[2].setImageResource(R.drawable.stage1_4_object2);
    bObject[3] = (ImageView) findViewById(R.id.bObject4Stage1_4);
    bObject[3].setImageResource(R.drawable.stage1_4_object2);
    bObject[4] = (ImageView) findViewById(R.id.bObject5Stage1_4);
    bObject[4].setImageResource(R.drawable.stage1_4_object2);
    bObject[5] = (ImageView) findViewById(R.id.bObject6Stage1_4);
    bObject[5].setImageResource(R.drawable.stage1_4_object2);
    bObject[6] = (ImageView) findViewById(R.id.bObject7Stage1_4);
    bObject[6].setImageResource(R.drawable.stage1_4_object2);
    bObject[7] = (ImageView) findViewById(R.id.bObject8Stage1_4);
    bObject[7].setImageResource(R.drawable.stage1_4_object2);
    bObject[8] = (ImageView) findViewById(R.id.bObject9Stage1_4);
    bObject[8].setImageResource(R.drawable.stage1_4_object2);

            for (ImageView bObj  : bObject) {
                   bObj.setOnClickListener(this);
            }

次の行でエラーが発生します。

        bObject[correctObject + 1].setImageResource(R.drawable.stage1_4_object1);

これの何が問題なのかわかりません。何が問題なのかを見つけた場合は、どんな助けも本当に感謝しています。ありがとう

4

3 に答える 3

5

配列はゼロベースです。ここで使用される値は、配列の境界を超えていますbObject。使用する

Listfromに値を追加し0ます。

objects.add(0);
...
objects.add(8);

そして使用:

bObject[correctObject].setImageResource(...);

または、次を使用できます。

for (int i=0; i < bObject.length; i++)
   objects.add(i);
}

これにより、インデックス値をハードコーディングする必要がなくなります。

objectsインデックスをList完全に削除するには、 Random#nextIntを使用できます。次に例を示します。

bObject[random.nextInt(bObject.length)].setImageResource(...);
于 2013-04-26T14:57:50.187 に答える
0

bObject[correctObject - 1].setImageResource(R.drawable.stage1_4_object1); と言う必要があります。

正しいオブジェクト値は 9 であり、bObject に与えることができる最大インデックスは 8 であるためです。

于 2013-04-26T15:00:52.327 に答える