Dans un projet, j'ai besoin de calculer la valeur maximale pour un score donné. Ensuite, cette ligne particulière et la colonne associée doivent être supprimées afin d'obtenir une seule valeur maximale dans chaque ligne. Donc, mon résultat devrait ressembler à ceci:Supprimer la colonne et la rangée de 2d Array après chaque itération
Résultat
C'est ce que j'ai jusqu'à présent.
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("##############################");
}
L'idée est de sauter la colonne et la ligne de la valeur précédente max mais si vous êtes à 3 itération vous sautez la colonne et la ligne d'une précédente et non de toutes les itérations précédentes. Y a-t-il une meilleure façon de résoudre cela? Je ne ai pas besoin d'utiliser le tableau nécessaire 2d
Si toutes les valeurs sont positives, vient de mettre les valeurs de la ligne ou de la colonne "supprimée" sont nulles, de sorte qu'elles n'affectent pas les itérations suivantes. – TDG
Je suis d'accord avec @TDG - boucle le tableau original 2d, n'en construit pas un nouveau après chaque itération. Au lieu de mettre des zéros dans les cellules, maintenez deux Set - 'usedRows' et' usedColumns' - qui gardent trace des lignes et des colonnes que vous avez barrées, et expédiez ceux qui utilisent une instruction if supplémentaire juste avant 'si (scores [i ] [j]> = max) ' – Stefan
Nice pour expliquer le problème avec l'image facile à comprendre, btw! – Stefan