2016-08-16 76 views
1

我有一個2D-String-array,我正在逐行查找最小值。當我發現最小值時,我將找到的最小值的行添加到ArrayList中,以便在下一次迭代中跳過該行以查找數組的第二個最小值。我這樣做直到每個行號都是ArrayList的一部分。java:如果語句跳過以下語句

見到目前爲止我的代碼:

List assignedRow = new ArrayList();  
for(int t = 0; t < excelMatrix.length-1; t++){  
double lowest = Double.parseDouble(excelMatrix[0][1]); 
    int row = 0, column = 0;  

    for(int r = 0; r < excelMatrix.length-1; r++){      
     if(assignedRow.contains(r) == true) continue;    
     for(int c = 1; c < excelMatrix[r].length; c++){    
      double value = Double.parseDouble(excelMatrix[r][c]); 
      if(lowest > value) { 
       lowest = value; 
       row = r;  
       column = c; 
      } 
     } 
    } 
    assignedRow.add(row); 
} 

的代碼工作正常,到目前爲止,直到最小是0排此後,它一直執行下去的條件。

我現在正在尋找一些東西,允許我回到for循環,使用下一個更高的r,它不是ArrayList的一部分。

我希望我明確了我的問題。

+2

只是一個側面說明(這不是你的代碼將無法正常工作問題):'if(assignedRow.contains(r)== true)'只是寫了'if(assignedRow.contains(r))'很長的路要走。 'contains' * already *返回一個'boolean',你不需要使用'== true'來獲得一個。我的意思是,你在哪裏停下來? if((assignedRow.contains(r)== true)== true)'? if(((assignedRow.contains(r)== true)== true)== true)'? **; - )** –

+0

恐怕我不能完全理解你想要做什麼。 –

+0

'if(assignedRow.contains(r)== true)'只會跳過那些已經有最小值的行。如果最小和第二最小值在同一行中,則會出現問題 – Sanjeev

回答

1

我希望這會起作用。

List assignedRow = new ArrayList(); 
    double lowest = 0; 
    while (assignedRow.size() < excelMatrix.length) { 

     // find intial lowest value from non assign row to compare 
     for (int t = 0; t < excelMatrix.length - 1; t++) { 
      if (!assignedRow.contains(t)) { 
       lowest = Double.parseDouble(excelMatrix[t][0]); 
       break; 
      } 
     } 

     int row = 0, column = 0; 
     for (int r = 0; r < excelMatrix.length - 1; r++) { 
      if (assignedRow.contains(r)) continue; 
      for (int c = 0; c < excelMatrix[r].length; c++) { 
       double value = Double.parseDouble(excelMatrix[r][c]); 
       if (lowest > value) { 
        lowest = value; 
        row = r; 
        column = c; 
       } 
      } 
     } 
     assignedRow.add(row); 
    } 

如果最低值存儲在任意行的第一列,因爲你開始從列索引1迭代(第三for循環int c=1lowest = Double.parseDouble(excelMatrix[0][1]

+0

非常感謝你!有用! :d – boersencrack