是什么导致这个ArrayIndexOutOfBoundsException?

时间:2011-05-04 09:15:57

标签: java android indexoutofboundsexception

我正在为Android制作数独游戏,但我遇到了问题。游戏编译,但一旦你进入游戏屏幕并按下按钮,游戏就会崩溃。

我检查了logcat,这些似乎是错误:

05-04 09:07:41.620: ERROR/AndroidRuntime(325): FATAL EXCEPTION: main
05-04 09:07:41.620: ERROR/AndroidRuntime(325): java.lang.ArrayIndexOutOfBoundsException
05-04 09:07:41.620: ERROR/AndroidRuntime(325):     at org.example.fpsudoku.Button.findScreenV(Button.java:59)
05-04 09:07:41.620: ERROR/AndroidRuntime(325):     at org.example.fpsudoku.Button.onCreate(Button.java:38)
05-04 09:07:41.620: ERROR/AndroidRuntime(325):     at android.app.Dialog.dispatchOnCreate(Dialog.java:307)
05-04 09:07:41.620: ERROR/AndroidRuntime(325):     at android.app.Dialog.show(Dialog.java:225)
05-04 09:07:41.620: ERROR/AndroidRuntime(325):     at org.example.fpsudoku.Game.showButtonOrError(Game.java:181)
05-04 09:07:41.620: ERROR/AndroidRuntime(325):     at org.example.fpsudoku.SudokuScreen.onTouchEvent(SudokuScreen.java:221)
05-04 09:07:41.620: ERROR/AndroidRuntime(325):     at android.view.View.dispatchTouchEvent(View.java:3766)

这是代码似乎是问题:

    findScreenV();

    for (int element : usesquare)
    {
        if (element != 0)
            buttons[element - 1].setVisibility(View.INVISIBLE);
    }
    setListeners();
}

private void findScreenV()
{
    button = findViewById(R.id.button);
    buttons[1] = findViewById(R.id.button_1);
    buttons[2] = findViewById(R.id.button_2);
    buttons[3] = findViewById(R.id.button_3);
    buttons[4] = findViewById(R.id.button_4);
    buttons[5] = findViewById(R.id.button_5);
    buttons[6] = findViewById(R.id.button_6);
    buttons[7] = findViewById(R.id.button_7);
    buttons[8] = findViewById(R.id.button_8);
    buttons[9] = findViewById(R.id.button_9);

3 个答案:

答案 0 :(得分:8)

只是一个猜测 - 数组索引是。如果你需要9个按钮,你就可以

Button[] buttons = new Button[9];

创建数组和

button = findViewById(R.id.button);
buttons[0] = findViewById(R.id.button_1);
buttons[1] = findViewById(R.id.button_2);
buttons[2] = findViewById(R.id.button_3);
buttons[3] = findViewById(R.id.button_4);
buttons[4] = findViewById(R.id.button_5);
buttons[5] = findViewById(R.id.button_6);
buttons[6] = findViewById(R.id.button_7);
buttons[7] = findViewById(R.id.button_8);
buttons[8] = findViewById(R.id.button_9);

填充它。在我的示例中处理buttons[9]将明确创建ArrayIndexOutOfBoundsException

答案 1 :(得分:1)

如果一个数组的长度为9,则表示你可以将arr [0]转换为arr [8],如果你试图检索不存在的arr [9],你将得到一个ArrayIndexOutOfBoundsException。

答案 2 :(得分:0)

在Java中创建数组时,那时你需要给出该数组的修复大小。 比如Button [] buttons = new Button [9]然后创建该数组的对象,如buttons [0] = findViewById(R.id.button_1);           其他明智的做法是使用arrayList作为最佳解决方案。