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