这段代码是我程序的相关部分,它产生一个数组越界错误,我无法弄清楚原因。 我的错误是' java.lang.ArrayIndexOutOfBoundsException:6',其中6是随机值,在randomShot()中的if语句中;
public class Ai
{
private int WIDTH;
private int HEIGHT;
public Ai(){
WIDTH=10;
HEIGHT=10;
}
int[][] board=new int[WIDTH][HEIGHT];
Random rand = new Random();
public void randomShot(){
x=rand.nextInt(WIDTH/2);
y=rand.nextInt(HEIGHT);
x=x*2;
if(y%2==0)
{
y+=1;
}
if(board[x][y]!=0) //java.lang.ArrayIndexOutOfBoundsException: 6
{
randomShot();
}
}
我注意到如果我使用代码
int[][] board=new int[10][10];
它完美无缺。我不明白为什么会这样,它做了完全相同的事情?
答案 0 :(得分:0)
定义电路板时,WIDTH和HEIGHT为0。 在类级变量之后调用构造函数。对于int,默认值为0.
答案 1 :(得分:0)
将board
初始化移动到构造函数中。字段初始化的顺序意味着在输入构造函数之前声明(并初始化)数组(因此,WIDTH
和HEIGHT
为零)。
private int WIDTH;
private int HEIGHT;
public Ai(){
WIDTH=10;
HEIGHT=10;
board=new int[WIDTH][HEIGHT]; // <-- here.
}
int[][] board; // =new int[WIDTH][HEIGHT];