我遇到了问题,我得到了一个" 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;
}
由于这种方法,游戏甚至会立即获胜。对此有些奇怪的是,班级中看起来几乎相同的所有其他方法都不会引起任何问题。以下是检查黄色垂直获胜可能性的方法,进行比较:
/**
* 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;
}
这个不会引起任何问题。有人可以告诉我警告来自哪里?如果您需要其他信息,请告诉我。
答案 0 :(得分:1)
函数中的死代码是内部for循环的the increment statement(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;
}
// ...
您可以轻松发现错误: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;
}
答案 1 :(得分:0)
在上面的方法中你有;在每个if语句之后,第二种方法是正确的,这是正确的方法。
if(gw.buttons[line][column].getIcon().equals(gw.red)); <--
终止了它自己的存在。您的代码行等同于
if(condition)
{
}
这意味着if条件之后的代码已经死了。
答案 2 :(得分:0)
重新格式化后,这是您的代码:
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; //this will always happen
}
}
return 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;
}
基本上,您不应该以分号结束if
语句。