2015-09-12 41 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,它應該可以正常工作。 –