2016-11-25 114 views
0

因此,我一直遇到問題與我的代碼檢查是否有垂直連接4。序我的代碼:所述板具有6行和7列,可變PLAYER1保持正被用作芯片的字符的值,並且只是playerID持有誰得到連接4.異常被拋出連接4算法

public int verticalWin() { 
    int playerID = 0; 

    for (int x = 0; x < board[x].length; x++) { 
     int count = 1; 
     for (int y = board.length-2; y >= 0; y--) { 
      if (board[y][x] == board[y+1][x]) { 
       count++; 
       if (count == 4) { 
        if (board[y][x] == player1) { 
         playerID = 1; 
        } else { 
         playerID = 2; 
        } 
       } 
      } else { 
       count = 1; 
      } 
     } 
    } 
    return playerID; 
} 

問題的值我一直在碰到一個例外java.lang.ArrayIndexOutOfBoundsException: 6不斷髮生,我認爲它是在第一線,但我似乎無法找到問題。

+1

*我認爲這是在第一行*:堆棧跟蹤告訴你什麼行拋出異常。不要猜測。閱讀堆棧跟蹤。然後使用您的調試器逐步執行代碼,並觀察變量的值。 –

+0

那麼根據堆棧跟蹤它是第一行,但我說我覺得因爲我找不到這個bug。 –

+1

問題是x samgak

回答

0

一些乾淨的代碼

boolean isWinnerOnColumn(int playerID, int column) { 
    int count = 0; 

    for (int row = 0; row < 6; row++) { 
     count = (board[row][column] == playerID) ? (count + 1) : 0; 
     if (count == 4){ 
      return true; 
     } 
    } 
    return false; 
} 

public int verticalWin() { 
    for (int column = 0; column < 7; column++) { 

     if (isWinnerOnColumn(1, column) { 
      return 1; 
     } 

     if (isWinnerOnColumn(2, column) { 
      return 2; 
     } 
    } 
    return 0; // no winner 
}