2013-09-30 123 views
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; 
} 
+2

你的內循環最多隻能運行一次。 –

+1

你從哪裏找到這是一個死碼?在日食?你能顯示你傳遞給這個函數的參數嗎? – aksappy

回答

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

for循環,返回到調用函數的代碼returns boolean value。所以很明顯代碼在第一次迭代之後不會再執行。

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

在最內層for循環----對於if和else條件檢查,您在第一次迭代之後從函數返回。所以t++沒有執行。這與Java沒什麼關係。我認爲在解決問題的邏輯中存在一些問題。您必須停止返回if條件爲truefalse條件。