2017-10-13 2 views
1

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

enter image description here

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

+0

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

+0

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

+0

Nice pour expliquer le problème avec l'image facile à comprendre, btw! – Stefan

Répondre

0

Il suffit de résumer les commentaires de construire une réponse appropriée:

Au lieu de mettre des zéros dans les cellules, maintenir deux ensembles de - usedRows et usedColumns - qui ne cesse de suivi de la lignes et colonnes que vous avez biffé, et expédier ceux qui utilisent un supplément si la déclaration juste avant if(scores[i][j] >= max)

Rappelez-vous réinitialiser max au début de chaque iteraton:

max = Float.MIN_VALUE