2013-04-22 33 views
0

我一直在研究「死代碼」和「無法訪問的代碼」一段時間,現在我仍然無法弄清楚我的程序中發生了什麼問題。這是我所擁有的片段。方法「gameEnd()」,它會檢查井字贏家:井字遊戲程序中無法訪問的代碼

private boolean gameEnd() { 
    // Setting local variables 
    int x = xMouseSquare; 
    int y = yMouseSquare; 
    int[][] g = gameBoard; 
    int c = CPU; 
    int h = HUMAN; 

    // Checking for a winner 

    /* Checking columns (xMouseSquare) 
    * Enter the y value, the vertical value, first; then x, the horizontal value, second 
    */ 

    // Set y equal to 0 and then add 1 
    for (y = 0; y < 3; y++) { 
     // Set CPU c equal to 0 
     c = 0; 
     // Set x equal to 0 and then add 1 
     for (x = 0; x < 3; x++) { 
      // Add CPU's value to the game board 
      c += g[x][y]; 

      // If statement returning the absolute value of CPU 
      if (Math.abs(c) == 3) { 
       // If these values are correct, return true; the game ends with CPU win horizontally 
       return true; 
      } 
     } 
    } 
    // If not, return false; game continues until all marks are filled 
    return false; 
    // Set y equal to 0 and then add 1 
    for (y = 0; y < 3; y++) { 
     // This time, however, set HUMAN h equal to 0 
     h = 0; 
     // Set x equal to 0 and then add 1 
     for (x = 0; x < 3; x++) { 
      // Then add HUMAN's value to the game board 
      h += g[x][y]; 
      // If statement returning the absolute value of HUMAN 
      if (Math.abs(h) == -3) { 
       // If these values are correct, return true; the game ends with HUMAN win horizontally 
       return true; 
      } 
     } 
    } 
    // If not, return false; game continues until all marks are filled 

    return false; 
    { 
     /* Checking rows (yMouseSquare) 
     * Enter the x value, the horizontal value, first; then y, the vertical value, second 
     */ 
     // Set x equal to 0 and then add 1 
     for (x = 0; x < 3; x++) { 
      // Set CPU equal to 0 
      c = 0; 
      // Set y equal to 0 and then add 1 
      for (y = 0; y < 3; y++) { 
       // Add CPU's value to the game board, but with y and then x 
       c += g[y][x]; 
       // If statement returning the absolute value of CPU 
       if (Math.abs(c) == 3) { 
        // If these values are correct, return true; the game ends with CPU win vertically 
        return true; 
       } 
      } 
     } 
     // If not, return false; game continues until all marks are filled 
     return false; 
     { 
      // Set x equal to 0 and then add 1 
      for (x = 0; x < 3; x++) { 
       // This time, however, set HUMAN h equal to 0 
       h = 0; 
       // Set y equal to 0 and then add 1 
       for (y = 0; y < 3; y++) { 
        // Then add HUMAN's value to the game board 
        h += g[x][y]; 
        // If statement returning the absolute value of HUMAN 
        if (Math.abs(h) == -3) { 
         // If these values are correct, return true; the game ends with CPU win vertically 
         return true; 
        } 
       } 
      } 
      // If not, return false; game continues until all marks are filled 
      return false; 
     } 
    } 
} 
} // error on this bracket; but when I remove it, some of the code above becomes unreachable. Can anyone point to what I'm doing wrong? 
+0

的誤差會更容易找到,如果你的格式(縮進)您的代碼正確。你的IDE甚至可以爲你做。 – jlordo 2013-04-22 03:06:18

+0

首先,修復縮進以匹配括號 - 現在它是非常錯誤的。如果你使用的是一個好的編輯器,它應該能夠自動爲你做到這一點。 – 2013-04-22 03:06:23

+1

當你返回false時,就退出這個方法。您的代碼的2/3碼永遠不會被執行(又稱不可達)。 – Supericy 2013-04-22 03:08:33

回答

4

如果它被縮進正確,我認爲這將表明,「返回false」中第一次出現總是會如果第一個執行'返回true'的實例未被命中,因此所有剩餘的代碼從未達到。

1

這是你的問題就在這裏

// If not, return false; game continues until all marks are filled 
     return false; <-- code exits here, everything below will not run. 
     { 
      // Set x equal to 0 and then add 1 
      for (x = 0; x < 3; x++) { 
...