0

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);
4

3 に答える 3

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

于 2011-05-04T09:20:27.257 に答える
1

配列の長さが 9 の場合、arr[0] から arr[8] を取得できることを意味します。そこにない arr[9] を取得しようとすると、ArrayIndexOutOfBoundsException が発生します。

于 2011-05-04T12:23:14.410 に答える
0

Javaでは、配列を作成するときに、その時点でその配列の修正サイズを指定する必要があります。Button [] buttons = new Button [9]のように、次に、buttons [0] = findViewById(R.id.button_1);のようにその配列のオブジェクトを作成します。それ以外の場合は、arrayListを最適なソリューションとして使用してください。

于 2011-05-04T09:50:08.627 に答える