Mauvais Types d'Opérande pour l'Opérateur Binaire “>”?
Je suis en train d'écrire un BST Programme. J'obtiens l'erreur:
"Mauvais Types d'Opérande pour l'Opérateur Binaire ">"
premier type: java.lang.Objet
deuxième type: java.lang.Objet"
C'est la méthode où il me donne l'erreur:
public void placeNodeInTree(TreeNode current, TreeNode t)
{
if(current == null)
current = t;
else{
if(current.getValue() > t.getValue())
current.setRight(t);
if(current.getValue() < t.getValue())
current.setLeft(t);
}
}
getValue() a un type de retour de l'Objet, donc le java.lang.Types d'objet. C'est la première fois que j'ai jamais vu cette erreur. Quelqu'un peut-il me donner quelques informations sur cette erreur? Grâce
Êtes-vous sûr que ces Objets ont seulement "l'Objet" parent en commun? Si oui, il n'y a pas de réelle comparaison sera faite. Essayer et trouver le véritable type de la classe (par exemple, utiliser instanceof) et essayer de les comparer par la suite. Ou essayez et refactoriser getValue() pour vous assurer qu'il renvoie à quelque chose qui utilise Comparable ou un Comparateur.
OriginalL'auteur svsav | 2012-02-22
Vous devez vous connecter pour publier un commentaire.
Assurez - vous simplement ne pouvez pas appliquer la
>
opérateur entre les objets. Qu'attendez-vous d'elle? Vous ne pouvez pas appliquer l'un quelconque des autres opérateurs binaires soit -+
,-
,/
etc (à l'exception de la concaténation de chaîne).Idéalement, vous devriez faire de votre
TreeNode
générique, et avoir soit unComparator<T>
qui est capable de comparer deux instances, ou faireT extend Comparable<T>
. De toute façon, vous pouvez ensuite comparer avec:ou
Sans les génériques vous pourrait attribuer aux valeurs
Comparable
ou encore utiliser unComparator
... mais les génériques serait un meilleur pari.Oui - voir mon edit.
OriginalL'auteur Jon Skeet
Java ne supporte pas la surcharge d'opérateur, de sorte que le
<
opérateur n'est pas défini pour les non-types primitifs. Vous voudrez probablement utiliser laComparable<T>
interface à la place.OriginalL'auteur Daniel Pryden
Vous ne pouvez pas comparer des objets à l'aide de
>
ou<
. Vous avez besoin de les comparer à l'aide d'une méthode, comme compareTo (dont vous avez besoin pour mettre en œuvre).OriginalL'auteur MByD
Vous ne pouvez pas comparer les deux arbitraty objets avec la
>
de l'opérateur. Le>
opérateur ne peut être utilisé (directement) sur primitive types d'entiers.Vous pourriez faire les objets que vous souhaitez comparer implémenter l'interface
java.lang.Comparable
, et ensuite appeler lacompareTo
méthode sur eux afin de les comparer.OriginalL'auteur Jesper
La valeur par défaut de la mise en œuvre d'égal à égal se soucie uniquement de référence de l'égalité. Un objet ne sait pas si le Chat est supérieure à Apple ni de soins. Vous devez fournir une mise en œuvre concrète qui remplace à la fois equals et hashcode ainsi que implémente l'interface Comparable. Cela vous permettra de déterminer si, en fait, le Chat est plus qu'Apple.
OriginalL'auteur Woot4Moo