0

コンパイルすると、ここでエラー 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の初心者で、ヒントに感謝します

4

2 に答える 2

7

この状態を見てください:

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

それはあなたが望むことをしません。0と4を同時に等しくすることはできないため、常に真になります。i

したがって、jが0の場合、ここに入ることになります。

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

バン。

于 2012-11-12T15:01:21.683 に答える
0

これを試して;

この行を置き換えます。

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

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

これにより、負のインデックスまたは 4 より大きい値で配列から参照しないようになります。

于 2012-11-12T15:10:15.857 に答える