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 行是一个变量声明:

诠释黑色 = 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循环运行的代码,但从未超过两三个,有什么建议吗?

4

6 回答 6

4

数组的索引从 0 到 7。迭代 while (index<9),将采用第 9 个元素(由索引 8 给出)。

于 2013-03-21T20:40:53.167 回答
1

您将用完其中一个数组的末尾,因为最终nextInt将返回 8,但数组的索引是 0-7(长度为 8)。

用于generator.nextInt(8)返回 0 到 7 之间的随机数。

于 2013-03-21T20:41:21.640 回答
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 到 8 生成数字generator.nextInt(9)。由于板的宽度和高度是 8,您应该生成范围从 0 到 7 的索引。在nextInt调用中将 9 更改为 8。

于 2013-03-21T20:41:13.700 回答
0

在数组中,索引从 0(不是 1)开始,因此对于 8 个元素的数组,您必须使用从 0 到 7 的索引。

于 2013-03-21T20:41:14.490 回答
0

指数从 0 到 7;因此,您必须在该范围内生成一个值。但是,长度为 8。

于 2013-03-21T20:42:14.970 回答