2016-12-15 1 views
0

J'essaie d'utiliser Comparator pour garder trace des index de valeur de tableau après les avoir triés. J'ai vu la mise en œuvre ailleurs, mais j'ai du mal à la faire fonctionner en synergie avec mon code.Utilisation du comparateur pour trier le tableau et conserver la position de l'index

J'ai rempli mon tableau 2d avec des valeurs aléatoires à [X] [0] et [X] [1] avec mes valeurs d'index.

import java.util.Arrays; 
    import java.util.Comparator; 
    public class ComparatorTest{ 

    static double testArray[][] = new double [10][10]; 

     public static void main(String[] args) { 
      fillArray(); 
      setIndexVals(); 
     } 

     public static void fillArray(){ 
      for(int row = 0; row < 10; row++){ 
       testArray[row][0] = Math.random(); 
       System.out.println(testArray[row][0]); 
      } 
     } 

     public static void setIndexVals(){ 
      for (int row = 0; row < testArray.length; row++){ 
       testArray[row][1]= row + 1; 
       System.out.println(testArray[row][1]); 

      } 
     } 
     public static void sortArray(){ 
      Arrays.sort(testArray, new Comparator<int[]>(){ 
       public int compare(double[] value, double[] index){ 
        return value[0]-index[0]; 
       } 
      }); 
     } 
    } 
+0

Qu'attendez-vous/voulez-vous que votre programme fasse? –

+0

Je souhaite que les valeurs soient triées par ordre croissant et que leurs valeurs d'index d'origine soient conservées à côté d'elles. – AnthonyJ

+0

Est-ce que le problème a à voir avec la façon dont vous avez comparé les doubles comme la façon dont je l'ai abordé dans ma réponse ou ne fonctionne toujours pas? –

Répondre

0

Remplacer

public int compare(double[] value, double[] index){ 
    return value[0]-index[0]; 
} 

avec

public int compare(double[] value1, double[] value2){ 
    return Double.compare(value1[0], value2[0]); 
} 

J'ai choisi de renommer les paramètres dans la méthode compare, car il faut vraiment deux tableaux dans le tableau 2D plutôt qu'une valeur et l'indice tableau. Si vous souhaitez comparer les index, vous devez comparer value1[1] et value2[1].

Mais le correctif réel change value[0]-index[0] parce que vous devriez rarement utiliser des comparaisons exactes pour comparer les doubles.