-1

I have a 2D array of doubles and I'm trying to sort the array based on the second column. I'm trying the answer posted by Costi Ciudatu here, but I get the following error:

The method sort(T[], Comparator) in the type Arrays is not applicable for the arguments (double[][], ArrayComparator)

How can I fix that?

My code so far is:

import java.util.Comparator;

class ArrayComparator implements Comparator<Comparable[]> {
    private final int columnToSort;
    private final boolean ascending;

    public ArrayComparator(int columnToSort, boolean ascending) {
        this.columnToSort = columnToSort;
        this.ascending = ascending;
    }

    public int compare(Comparable[] c1, Comparable[] c2) {
        int cmp = c1[columnToSort].compareTo(c2[columnToSort]);
        return ascending ? cmp : -cmp;
    }
}

and

import java.util.Arrays;
import java.util.Comparator;

public class Convex {

    public static void mysort(double points[][], int n){ 
        Arrays.sort(points, new ArrayComparator(1, true));               
    }
}
Community
  • 1
  • 1

1 Answers1

1

A primitive double isn't a Comparable, so you need to adapt this comparator to compare double[]:

class ArrayComparator implements Comparator<double[]> {
    private final int columnToSort;
    private final boolean ascending;

    public ArrayComparator(int columnToSort, boolean ascending) {
        this.columnToSort = columnToSort;
        this.ascending = ascending;
    }

    public int compare(double[] c1, double[] c2) {
        int cmp = Double.compare(c1[columnToSort], c2[columnToSort]);
        return ascending ? cmp : -cmp;
    }
}
Mureinik
  • 297,002
  • 52
  • 306
  • 350