2016-12-15 78 views
0

我试图使用比较器对数组值进行排序后跟踪数组值。我已经看到了其他地方的实现,但我努力使它与我的代码协同工作。使用比较器对数组进行排序并保持索引位置

我用我的索引值在[X] [0]和[X] [1]处用随机值填充了我的二维数组。

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

你期望/希望你的程序做什么? –

+0

我希望按升序对值进行排序,并将其原始索引值保存在旁边。 – AnthonyJ

+0

这个问题与你如何比较双打​​有什么关系,比如我在答案中如何处理它,或者仍然不能正常工作? –

回答

0

替换

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

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

我选择在compare方法重命名的参数,因为它确实发生在两个阵列2D阵列中,而不是一个值和索引阵列。如果你想比较索引,那么你会比较value1[1]value2[1]

但真正的解决方案正在改变value[0]-index[0],因为你应该很少使用精确的比较来比较双打。

相关问题