死代码来自哪里?

Lun*_*tic 5 java eclipse dead-code

我遇到了问题,我在Eclipse中收到了"死代码"警告,我真的不知道为什么.代码来自我的Connect Four项目,更确切地说,它来自Class,它检查是否有人获胜.此方法检查红色的所有水平获胜可能性.代码如下:

/**
 * Method to check the horizontal winning possibilities for red
 * @return true if red won or false if not
 */
public boolean checkHorRed(){
    for(int line = 0; line < 6; line++) {
        for(int column = 0; column < 4; column++) { //column++ is underlined and causes the "dead Code" warning
            if(gw.buttons[line][column].getIcon().equals(gw.red));
                if(gw.buttons[line][column+1].getIcon().equals(gw.red));
                    if(gw.buttons[line][column+2].getIcon().equals(gw.red));
                        if(gw.buttons[line][column+3].getIcon().equals(gw.red));
                            return true;
        }
    }
    return false;
}    
Run Code Online (Sandbox Code Playgroud)

由于这种方法,甚至可以立即赢得比赛.这有点奇怪的是,类中看起来几乎相同的所有其他方法都不会导致任何问题.以下是检查黄色垂直获胜可能性的方法,以进行比较:

/**
 * Method to check the vertical winning possibilities for yellow
 * @return true or false
 */
public boolean checkVertYel(){
    for(int line = 3; line < 6; line++) {
        for(int column = 0; column < 7; column++) {
            if(gw.buttons[line][column].getIcon().equals(gw.yellow))
                if(gw.buttons[line-1][column].getIcon().equals(gw.yellow))
                    if(gw.buttons[line-2][column].getIcon().equals(gw.yellow))
                        if(gw.buttons[line-3][column].getIcon().equals(gw.yellow))
                            return true;
        }
    }
    return false;
}    
Run Code Online (Sandbox Code Playgroud)

这个不会引起任何问题.有人可以告诉我警告来自哪里?如果您需要其他信息,请告诉我.

ifl*_*oop 1

函数中的死代码是内部 for 循环 ( ) 的增量语句column++。该return true语句将始终被执行(如果执行循环),因此循环增量永远不会发生。

这是您的代码,但格式正确:

// ...

for(int column = 0; column < 4; column++) {
    //column++ is underlined and causes the "dead Code" warning
    if(gw.buttons[line][column].getIcon().equals(gw.red));

    if(gw.buttons[line][column+1].getIcon().equals(gw.red));

    if(gw.buttons[line][column+2].getIcon().equals(gw.red));

    if(gw.buttons[line][column+3].getIcon().equals(gw.red));

    return true;
}

// ...
Run Code Online (Sandbox Code Playgroud)

您可以很容易地发现错误:return true将始终执行,因此不会执行内循环的增量语句。

这就是你的代码应该是这样的:

public boolean checkHorRed() {
    for(int line = 0; line < 6; line++) {
        for(int column = 0; column < 4; column++) {
            //column++ is underlined and causes the "dead Code" warning
            if(gw.buttons[line][column].getIcon().equals(gw.red)
                    && gw.buttons[line][column+1].getIcon().equals(gw.red)
                    && gw.buttons[line][column+2].getIcon().equals(gw.red)
                    && gw.buttons[line][column+3].getIcon().equals(gw.red) {
                return true;
            }
        }
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)