双 for 循环中的死代码



我最近开始用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;
}

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

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;
}

代码returns boolean valuefor循环中并返回到调用函数。因此,很明显,代码在第一次迭代后不会进一步执行。

 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.
        }   
    }

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

相关内容

  • 没有找到相关文章

最新更新