更改2D数组中的值

时间:2013-03-21 20:38:36

标签: java

好吧基本上,我有一个多维数组,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循环中运行,但是从来没有过去两三次,有什么建议吗?

6 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您正在使用generator.nextInt(9)生成0到8之间的数字。由于棋盘的宽度和高度为8,因此您应该生成从0到7的索引。在nextInt调用中将9更改为8。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

指数从0到7;因此,您必须生成该范围内的值。然而,长度是8。

答案 5 :(得分: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
    }
}