我最近开始用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 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.
}
}
在最内部的 for 循环中----对于 if 和 else 条件检查,您将在第一次迭代后从函数返回。因此,t++
没有执行。Java什么都不是。我认为解决问题的逻辑存在一些问题。您必须停止返回if
条件为true
或false
条件。