2016-08-16 5 views
1

Ich habe ein 2D-String-Array, durch das ich Zeile für Zeile gehe, um das Minimum zu finden. Wenn ich das Minimum gefunden habe, füge ich die Zeile des gefundenen Minimums zu einer ArrayList hinzu, um die Zeile in der nächsten Iteration zu überspringen, um die zweitniedrigste Nummer des Arrays zu finden. Ich mache das, bis jede Zeilennummer Teil der ArrayList ist.java: if-Anweisung, die folgende if-Anweisung überspringt

Sehen Sie meinen Code so weit:

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

Der Code in Ordnung so weit funktioniert, bis die minimale in der Reihe ist 0. Danach wird es immer der Zustand weiter ausgeführt wird.

Ich suche jetzt nach etwas, das mir erlaubt, wieder in die for-Schleife zu gehen, wobei ich das nächsthöhere r verwende, das nicht Teil der ArrayList ist.

Ich hoffe, ich habe mein Problem klar gemacht.

+2

nur eine Randnotiz (es ist nicht Das Problem): 'if (assignedRow.contains (r) == true)' ist nur ein langer Weg, um 'if (assignedRow.contains (r))' zu schreiben. 'contains' * already * gibt einen' boolean' zurück, Sie müssen '== true' nicht verwenden, um einen zu erhalten. Ich meine, wo hörst du auf? 'if ((assignedRow.contains (r) == true) == wahr)'? 'if (((assignedRow.contains (r) == wahr) == wahr) == wahr)'? ** ;-) ** –

+0

Ich fürchte, ich kann nicht ganz verstehen, was du machen willst. –

+0

'if (assignedRow.contains (r) == true)' überspringt nur die Zeilen, die bereits das Minimum haben. Das Problem tritt auf, wenn das Minimum und das 2. Minimum in der gleichen Zeile sind. – Sanjeev

Antwort

1

Ich hoffe, das wird funktionieren.

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

Ihr Code wird nicht funktionieren, wenn niedrigsten Wert auf den ersten Spalte jeder Zeile gespeichert wird, weil Sie aus Spaltenindex 1 (dritte für Schleife int c=1 und lowest = Double.parseDouble(excelMatrix[0][1]) iterieren starten

+0

aktualisiert Vielen Dank! Es klappt! : D – boersencrack