Java:数组索引超出范围异常

时间:2012-11-12 14:58:54

标签: java multidimensional-array indexoutofboundsexception

当我编译时,我遇到错误java.lang.ArrayIndexOutOfBoundsException:-1。我检查了代码3次,没有发现错误,也不是在数组结束后写的。

Random nahoda = new Random();    int[][] minPol = new int[5][5];
int[][] cisPol = new int[5][5];
for(int i = 0;i<5;i++)
{
for(int j=0;j<5;j++)
{
minPol[i][j] = nahoda.nextInt(2);
cisPol[i][j] = 0;
}
}
for(int i = 0;i<5;i++)
{
    for(int j=0;j<5;j++)
    {
        if(minPol[i][j]!=0)
        {
        if(i != 0 || j != 0 || i != 4 || j != 4)
        {
            cisPol[i+1][j+1]++;
            cisPol[i+1][j-1]++;
            cisPol[i-1][j+1]++;
            cisPol[i-1][j-1]++;
            cisPol[i+1][j]++;
            cisPol[i-1][j]++;
            cisPol[i][j+1]++;
            cisPol[i][j-1]++;
        }
        else
        {
            if(i == 0)
            {
                if(j == 0)
                {
                    cisPol[i+1][j+1]++;
                    cisPol[i][j+1]++;
                    cisPol[i+1][j]++;
                }
                else if(j == 4)
                {
                    cisPol[i+1][j]++;
                    cisPol[i+1][j-1]++;
                    cisPol[i][j-1]++;
                }
                else
                {
                    cisPol[i+1][j+1]++;
                    cisPol[i][j+1]++;
                    cisPol[i+1][j]++;
                    cisPol[i+1][j-1]++;
                    cisPol[i][j-1]++;
                }
            }
            else if(i == 4)
            {
                if(j == 0)
                {
                    cisPol[i-1][j+1]++;
                    cisPol[i-1][j]++;
                    cisPol[i][j+1]++;
                }
                else if(j == 4)
                {
                    cisPol[i-1][j-1]++;
                    cisPol[i-1][j]++;
                    cisPol[i][j-1]++;
                }
                else
                {
                    cisPol[i][j-1]++;
                    cisPol[i][j+1]++;
                    cisPol[i-1][j+1]++;
                    cisPol[i-1][j]++;
                    cisPol[i-1][j-1]++;
                }
            }
        }            
        }
    }
}

我是Java初学者,感谢提示

2 个答案:

答案 0 :(得分:7)

看看这个条件:

if(i != 0 || j != 0 || i != 4 || j != 4)

这不符合您的要求。 始终为真,因为i不能同时等于0和4。

因此,当j为0时,你最终会进入这里:

cisPol[i+1][j-1]++;

邦。

答案 1 :(得分:0)

试试这个;

替换此行;

 if(i != 0 || j != 0 || i != 4 || j != 4)

 if( i>=1 && j>=1 && j<4 && i<4)

这将确保您不使用负索引或大于4的值从数组中引用。