0

さて、基本的に、私は多次元配列、Board[8][8]を持っています。配列内のランダムな値を取得して、それらを別の値にしようとしています。私が変更している値は、すでに特定の値である必要があります。私が実行しているコードは、これらの結果を出し続けます:

java.lang.ArrayIndexOutOfBoundsException: 8
       at checkers.init(checkers.java:32)
       at sun.applet.AppletPanel.run(Unknown Source)
       at java.lang.Thread.run(Unknown Source)

これが問題の原因となっているコードです。8行目は変数宣言であることに注意してください。

int BLACK = 1;

    Random generator = new Random();
    int checkersCount_B = 0, checkersCount_W = 0, x, y;

    while(checkersCount_B < 9){
        x = generator.nextInt(9);
        y = generator.nextInt(9);

        if(Board[x][y] == BLACK){
            Board[x][y] = BLACK_CHECKER;
        //  System.out.println(x + " " + y);
            checkersCount_B ++;
        } else{
            //nothing
        }
    }

32行目はifステートメントです。

コードは、whileループを実行するカップルに対して機能しますが、2つか3つを超えることはありません、何か提案はありますか?

4

6 に答える 6

4

配列のインデックスは 0 から 7 までです。(index<9) の間反復すると、9 番目の要素 (インデックス 8 で指定) が取得されます。

于 2013-03-21T20:40:53.167 に答える
1

最終的にnextIntは 8 を返すため、配列の 1 つの末尾から実行されますが、配列のインデックスは 0-7 (長さ 8) です。

generator.nextInt(8)0 から 7 までの乱数を返すために使用します。

于 2013-03-21T20:41:21.640 に答える
0

で 0 から 8 までの数字を生成していますgenerator.nextInt(9)。ボードの幅と高さは 8 であるため、0 から 7 の範囲のインデックスを生成する必要がありますnextInt。呼び出しで 9 を 8 に変更します。

于 2013-03-21T20:41:13.700 に答える
0

配列のインデックスは (1 ではなく) 0 から始まるため、8 要素の配列の場合は 0 から 7 までのインデックスを使用する必要があります。

于 2013-03-21T20:41:14.490 に答える
0

コピーして貼り付け可能なソリューション:

Random generator = new Random();
int checkersCount_B = 0, checkersCount_W = 0, x, y;

while(checkersCount_B < 8){
    x = generator.nextInt(8);
    y = generator.nextInt(8);

    if(Board[x][y] == BLACK){
        Board[x][y] = BLACK_CHECKER;
    //  System.out.println(x + " " + y);
        checkersCount_B ++;
    } else{
        //nothing
    }
}
于 2013-03-21T21:30:17.377 に答える
0

インデックスは 0 から 7 までです。したがって、その範囲内の値を生成する必要があります。ただし、長さは 8 です。

于 2013-03-21T20:42:14.970 に答える