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?
4

2 回答 2

4

如果缩进正确,我认为如果没有命中第一个“return true”实例,则将始终执行第一次出现的“return false”,因此永远不会到达所有剩余的代码。

于 2013-04-22T03:11:03.707 回答
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++) {
...
于 2013-04-22T04:55:08.130 回答