2015-09-12 28 views
1

我有四种方法检查给定网格位置是否在占用位置(值为1)旁边。网格被假定为环绕,即如果在50x50网格[0] [1]中是给定位置并且网格[49] [1]被占用,则该方法应该返回true/My checkNorth并且checkEast方法正常工作,但每次运行程序时,我都会得到一个ArrayIndexOutofBoundsException:-1错误,无论是南方还是西方法。我检查了我的数学,我认为它应该工作 - 我错误地使用了模数,还是错过了其他的东西? 编辑:澄清包装标准,字使用更正。围绕网格 - 只有东/西错误

boolean checkWest(int indexA, int indexB) 
{ 
    if (indexA-1 > 0) 
    { 
     if (grid[indexA-1][indexB] == 1) 
      { 
      return true; 
      } 
    } 
    if (indexA-1 < 0) 
     { 
     if (grid[(indexA-1)%width][indexB] == 1) 
      {return true;} 
     else return false; 
     } 
return false; 
} 

回答

0

我看到几个问题。首先,Java数组是零索引的,这意味着第一个元素位于索引0.因此,当indexA-1等于0时,检查grid[indexA-1][indexB]是可以的。其次,当索引A等于0时,你没有正确处理。这是我的实现。我也简化了一下逻辑。

boolean checkWest(int indexA, int indexB) 
{ 
    if (indexA > 0) 
     return grid[indexA - 1][indexB] == 1; 
    else 
     return grid[width + indexA - 2][indexB] == 1; 
} 

编辑:我很确定我用第二个返回语句屠杀了数学。它应该是现在...

+0

谢谢!我很感激。两个问题: 1.如果Java数组是零索引的,应读取第一个if语句(indexA> = 0)? 2.我知道[width + indexA - 2]是怎么回事,但为什么最好使用模数? –

+0

@ r.ree 1.如果使用'indexA> = 0',那么最终会尝试在索引-1处读取您的网格,因为'0 - 1 == -1'。这会给你一个'ArrayIndexOutofBoundsException'。 2.这可能取决于个人偏好。我认为数学更简单。只要'indexA'永远不会低到'width + indexA - 2'小于0,它应该可以正常工作。 –