数组索引越界异常如何克服

时间:2014-08-21 09:19:19

标签: java

public void updateGoalPositions(Goal[][] goals)
{    
int row=(goals.length-1);
int col=(goals[0].length-1);

for(int i=0;i<row;i++)
    for(int j=0;j<col;j++)
    {
        if(goals[i][j+1].isHit())
        {
            Goal temp=goals[i][j+1];
            goals[i][j+1]=goals[i][j];
            goals[i][j]=temp;
        }
        else
            if(goals[i][j-1].isHit())
            {
                Goal temp=goals[i][j-1];
                goals[i][j-1]=goals[i][j];
                goals[i][j]=temp;
            }
    }          
}

goals[i][j-1]显示错误。如何覆盖它?

4 个答案:

答案 0 :(得分:4)

当j = 0时,j - 1给出-1,这导致错误因此测试条件仅在j - 1> = 0

else
    if(j - 1 >= 0 && goals[i][j-1].isHit())
    {
        Goal temp=goals[i][j-1];
        goals[i][j-1]=goals[i][j];
        goals[i][j]=temp;
    }

答案 1 :(得分:1)

你所拥有的任何地方j+1都会超过上次迭代的限制。

为什么呢?因为数组在Java中从零开始,这意味着如果您有一个大小为N的数组,则索引将在[0, N-1]之间运行。在您的上一次迭代中,当jN-1时,j+1实际上是N,这超出了界限。

了解JLS - Chapter 10. Arrays中的数组。

另请注意,j-1的位置为-1(在j为0的第一次迭代中)。

答案 2 :(得分:1)

在第一次j迭代时,j = 0且j-1的值为-1 例如,添加if (j-1>-1)

答案 3 :(得分:1)

i = 0j = 0goals[i][j-1]意味着goals[0][-1]这是您的问题时,您需要修复算法。