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]
显示错误。如何覆盖它?
答案 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]
之间运行。在您的上一次迭代中,当j
为N-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 = 0
和j = 0
,goals[i][j-1]
意味着goals[0][-1]
这是您的问题时,您需要修复算法。