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
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
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
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
Schön, das Problem mit dem einfach zu bedienenden Bild zu erklären, übrigens! – Stefan