Ne peut invoquer compareTo(double) sur le type primitif double
La ligne return array[index1].compareTo(array[index2]);
fournit une erreur "Ne peut invoquer compareTo(double) sur le type primitif double". Comment résoudre ce problème?
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*:: 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);
utiliser la Double classe 😉
Pour explorer plus, consultez la documentation de java et de l'intérieur qui vont dans le package java.lang.Double, ce qui est appelé une classe Wrapper et en Java pour chaque type primitif, il y a des correspondants des classes wrapper sont présents dans le java.lang paquet
Voici le lien pour la documentation docs.oracle.com/javase/7/docs/api
Pour explorer plus, consultez la documentation de java et de l'intérieur qui vont dans le package java.lang.Double, ce qui est appelé une classe Wrapper et en Java pour chaque type primitif, il y a des correspondants des classes wrapper sont présents dans le java.lang paquet
Voici le lien pour la documentation docs.oracle.com/javase/7/docs/api
OriginalL'auteur Klausos Klausos | 2013-11-22
Vous devez vous connecter pour publier un commentaire.
Remplacer l'appel d'une méthode d'instance
compareTo
avec l'appel de statiquecomparer
méthode, comme ceci:Cela vous permet de garder votre
double
s dans un tableau de primitives, et d'éviter l'autoboxing avant d'appeler une méthode d'instance.Double.compare(...)
😉Comment trier dans l'ordre inverse dans ce cas? Où mettre ,Collections.reverseOrder()?
est une inversion de l'ordre naturel. Puisque vous êtes à l'aide d'un comparateur, vous pouvez changer l'ordre à l'intérieur, en appelant
Double.compare(array[index2], array[index1])
, ou par l'ajout d'un supplémentboolean isReverseOrder
drapeau du constructeur, de le stocker dans une variable membre, et d'inverser le résultat de la comparaison à l'intérieur de lacompare
méthode lorsqueisReverseOrder
est réglé.OriginalL'auteur dasblinkenlight
pour les types primitifs ne pas utiliser
compareTo
, utilisez==
au lieumais si vous souhaitez utiliser
compareTo
il suffit de créer un tableau Double==
n'est pas un équivalent decompareTo
mais deequals
.OriginalL'auteur RamonBoza
En java, les types primitifs n'ont pas de méthodes. Au lieu d'utiliser les types de données primitifs utiliser les classes Wrapper.
changement
à
ou
essayer avec
Double[] array;
au lieu dedouble[] array;
OriginalL'auteur Prabhakaran
Types primitifs ne peuvent être comparées directement par un comparateur, que l'interface n'est mise en œuvre par le collateur et RuleBasedCollator. Pas de wrapper classe implémente comparateur. En raison de laquelle compilateur ne pas être en mesure automatique de la boîte.
Il suffit de regarder dans la Double classe et vous trouverez une fonction intégrée de méthode qui fournit une méthode de comparaison.
public static int compare(double d1, double d2)
Retourne:
la valeur 0 si d1 est numériquement égale à d2; une valeur inférieure à 0 si d1 est numériquement inférieur à d2; et une valeur supérieure à 0 si d1 est numériquement supérieure d2.
Inverse: Plusieurs l'ensemble de l'expression par -1;
OriginalL'auteur nimish parikh