我最近开始用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;
}
答案 0 :(得分: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;
}
答案 1 :(得分: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.
}
}
答案 2 :(得分:0)
在最内部for循环内部----对于if和else条件检查,您将在第一次迭代后从函数返回。所以t++
没有执行。它与Java无关。我认为问题解决逻辑存在一些问题。您必须停止返回if
条件为true
或false
条件。