1

我最近开始用 Java 编码,我遇到了这个死代码问题。我一直在 Stack Overflow 上查看其他问题(和答案),但我还没有找到解决方案。希望您能提供帮助。问题发生在t++

public static boolean constraint2(int [][] xmatrix, int [][] ymatrix){
    for(int l = 0; l < xmatrix.length; l++){
        for(int t = 0; t < xmatrix[0].length; t++){ // DEAD CODE at "t++"
            if(b[t]*xmatrix[l][t] > ymatrix[l][t]){
                return false;
            }
            else{
                return true;
            }   
        }

        }
    return false;
}
4

3 回答 3

3

这意味着该语句将永远不会执行。此循环的第一次迭代将退出方法并中断循环。所以这段代码相当于:

for(int l = 0; l < xmatrix.length; l++){
    if(xmatrix[0].length>0) {
        if(b[0]*xmatrix[l][0] > ymatrix[l][0]){
            return false;
        }
        else{
            return true;
        }   
    }
}

而且t++没有任何意义。

“死代码”通常只是一个警告,不会阻止您编译您的应用程序。

另外,可能您的意思是t < xmatrix[l].length在循环条件下。

更新:您没有在问题正文中提及它,但据我了解,从您的评论到另一个答案,您需要检查矩阵中每个元素的约束是否成立。要实现它,您只需要检查约束是否失败:

public static boolean constraint2(int [][] xmatrix, int [][] ymatrix){

    for(int l = 0; l < xmatrix.length; l++){
        for(int t = 0; t < xmatrix[l].length; t++){
            if(b[t]*xmatrix[l][t] > ymatrix[l][t]) {
                //constraint failed
                return false;
            }   
        }
    }
//constraint holds for all elements
return true;
}
于 2013-09-30T06:46:42.440 回答
1

returns boolean value循环中的代码for并返回到调用函数。所以很明显,代码在第一次迭代后不会继续执行。

 for(int t = 0; t < xmatrix[0].length; t++){ //This is your for loop
        if(b[t]*xmatrix[l][t] > ymatrix[l][t]){
            return false; // In first iteration, this loop either return false
        }                  // or 
        else{              //true as per the condition
            return true;   // And return to the calling function by breaking the loop.
        }   
    }
于 2013-09-30T06:46:49.770 回答
0

在最内部的 for 循环中----对于 if 和 else 条件检查,您将在第一次迭代后从函数返回。所以t++没有执行。这与 Java 无关。我认为解决问题的逻辑存在一些问题。您必须停止返回if条件是truefalse条件。

于 2013-09-30T06:47:20.610 回答