2017-10-13 1 views
1

In einem Projekt muss ich Max-Wert für eine bestimmte Punktzahl berechnen. Danach sollte diese bestimmte Zeile und die zugehörige Spalte gelöscht werden, um nur einen maximalen Wert in jeder Zeile zu erhalten. So sollte mein Ergebnis so aussehen:Lösche Spalte und Zeile des 2D-Arrays nach jeder Iteration

Ergebnis

enter image description here

Dies ist, was ich bisher haben.

float max = Float.MIN_VALUE; 
    int remove_row = firstCluster.size()+1; 
    int remove_column = firstCluster.size()+1; 
    float[ ][ ] scores = new float[firstCluster.size()][secondCluster.size()]; 

    for(int i=0; i<scores.length; i++){ 
     if (i == remove_row) 
      continue; 

     for(int j=0; j<scores[i].length; j++){ 
      if (j == remove_column){ 
       continue; 
      } 
      else{ 
       System.out.print(scores[i][j]); 
       if(scores[i][j] >= max) 
       { 
        max = Math.max(max, scores[i][j]); 
        remove_row = i; 
        remove_column = j; 
        System.out.print("Max: "+max); 
       } 
      } 
     } 
     System.out.println("##############################"); 
    } 

Die Idee ist, Spalte und Zeile der bisherigen Maximalwert zu überspringen, aber wenn Sie in 3 Iteration sind dann einfach in die Spalte und Zeile der vorherigen überspringen und nicht von allen vorherigen Iterationen. Gibt es einen besseren Weg, dies zu lösen? Ich brauche nicht notwendig 2D-Array verwenden

+0

wenn alle Werte positiv sind, gerade eingestellt die Werte der "gelöschten" Zeile oder Spalte auf Null, so dass sie die nächsten Iterationen nicht beeinflussen. – TDG

+0

Ich stimme mit @TDG überein - Schleife das ursprüngliche 2d Array, baue kein neues nach jeder Iteration. Anstatt Nullen in die Zellen zu setzen, sollten Sie zwei Set-Elemente - 'usedRows' und' usedColumns' - pflegen, die die durchgestrichenen Zeilen und Spalten verfolgen und diese mit einer zusätzlichen if-Anweisung vor if (scores [i ] [j]> = max) ' – Stefan

+0

Schön, das Problem mit dem einfach zu bedienenden Bild zu erklären, übrigens! – Stefan

Antwort

0

einfach die Kommentare zusammenfassend, um eine richtige Antwort zu bauen:

Stattdessen Nullen in den Zellen setzen, halten zwei Set-- usedRows und usedColumns -, die von der verfolgten hält Zeilen und Spalten Sie haben durchgestrichen, und am Anfang jeder iteraton vor if(scores[i][j] >= max)

Denken Sie daran, reset max nur diejenigen mit einem zusätzlichen if-Anweisung versenden:

max = Float.MIN_VALUE 
Verwandte Themen