Java Array out of bounds错误是不是超出界限?

时间:2015-03-19 00:39:42

标签: java arrays indexoutofboundsexception

这段代码是我程序的相关部分,它产生一个数组越界错误,我无法弄清楚原因。 我的错误是' 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];

它完美无缺。我不明白为什么会这样,它做了完全相同的事情?

2 个答案:

答案 0 :(得分:0)

定义电路板时,WIDTH和HEIGHT为0。 在类级变量之后调用构造函数。对于int,默认值为0.

答案 1 :(得分:0)

board初始化移动到构造函数中。字段初始化的顺序意味着在输入构造函数之前声明(并初始化)数组(因此,WIDTHHEIGHT为零)。

private int WIDTH;
private int HEIGHT;

public Ai(){
    WIDTH=10;
    HEIGHT=10;
    board=new int[WIDTH][HEIGHT]; // <-- here.        
}

int[][] board; // =new int[WIDTH][HEIGHT];