Nicht aufrufen compareTo(double) auf den primitiven Typ double
Die Linie return array[index1].compareTo(array[index2]);
einen Fehler "Nicht aufrufen compareTo(double) auf den primitiven Typ double". Wie man dieses Problem lösen?
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*:: This function implements a comparator of double values :*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
private class ArrayIndexComparator implements Comparator<Integer>
{
private final double[] array;
public ArrayIndexComparator(double[] array)
{
this.array = array;
}
public Integer[] createIndexArray()
{
Integer[] indexes = new Integer[array.length];
for (int i = 0; i < array.length; i++)
{
indexes[i] = i; //Autoboxing
}
return indexes;
}
@Override
public int compare(Integer index1, Integer index2)
{
//Autounbox from Integer to int to use as array indexes
return array[index1].compareTo(array[index2]);
}
}
double[] dist = new double[centroids.size()];
//fill array...
ArrayIndexComparator comparator = new ArrayIndexComparator(dist);
Integer[] indexes = comparator.createIndexArray();
Arrays.sort(indexes, comparator);
- verwenden Sie Doppelte Klasse 😉
- Mehr zu erforschen, besuchen Sie die java Dokumentation und in das Paket java.lang.Doppelt, dies wird als eine Wrapper-Klasse und in Java für jeden primitiven Typ gibt es entsprechende wrapper-Klassen vorhanden sind, unter java.lang-Paket
- Hier ist der link für die Dokumentation docs.oracle.com/javase/7/docs/api
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersetzen Sie den Aufruf einer Instanz-Methode
compareTo
mit dem Aufruf des statischevergleichen
Methode, wie diese:Dadurch können Sie Ihre
double
s in ein array von primitiven, und vermeiden autoboxing vor dem Aufruf einer Instanz-Methode.Double.compare(...)
😉Double.compare(array[index2], array[index1])
oder durch hinzufügen eine zusätzlicheboolean isReverseOrder
Flagge an den Konstruktor, der Speicherung in eine member-variable, und invertiert das Ergebnis des Vergleichs innerhalb dercompare
Methode, wennisReverseOrder
eingestellt ist.für primitive Typen verwenden Sie nicht
compareTo
verwenden==
stattaber wenn Sie verwenden möchten
compareTo
erstellen Sie einfach ein Double array==
ist nicht ein äquivalent voncompareTo
aberequals
.In java primitive Typen haben keine Methoden. Statt mit primitiven Daten-Typen Wrapper-Klassen.
ändern
zu
oder
versuchen mit
Double[] array;
stattdouble[] array;
Primitive Typen können nicht direkt verglichen werden mit einem Komparator, wie die Schnittstelle nur umgesetzt collator und RuleBasedCollator. Keine wrapper-Klasse implementiert comparator. Durch die compiler nicht in der Lage, auto-box.
Schauen Sie einfach in Doppel-Klasse, und Sie werden finden eine gewisse Methode, die bietet eine compare-Methode.
public static int compare(double d1, double d2)
Gibt:
den Wert 0, wenn d1 ist numerisch gleich d2; ein Wert kleiner als 0, wenn d1 numerisch kleiner ist als d2; und ein Wert größer als 0, wenn d1 ist numerisch größer als d2.
Reverse: Mehreren der gesamte Ausdruck durch -1;