Ik ben een BST-programma aan het schrijven. Ik krijg de foutmelding:
“Slechte operandtypen voor binaire operator “>”
eerste type: java.lang.Object
tweede type: java.lang.Object”
Dit is de methode waarbij ik de fout krijg:
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() heeft het retourtype Object, dus de java.lang.Object-typen. Dit is de eerste keer dat ik deze fout ooit heb gezien. Kan iemand mij wat achtergrondinformatie geven over deze fout? Bedankt
Antwoord 1, autoriteit 100%
Natuurlijk – u kunt de operator >
gewoon niet tussen objecten toepassen. Wat zou je ervan verwachten? U kunt ook geen van de andere binaire operatoren toepassen – +
, -
, /
enz. (met uitzondering van tekenreeksaaneenschakeling).
Idealiter zou u uw TreeNode
generiekmoeten maken, en ofwel een Comparator<T>
moeten hebben die elke twee instanties kan vergelijken, of maak T extend Comparable<T>
. Hoe dan ook, je kunt ze dan vergelijken met:
int comparisonResult = comparator.compare(current.getValue(), t.getValue());
if (comparisonResult > 0) {
// current "greater than" t
} else if (comparisonResult < 0) {
// current "less than" t
} else {
// Equal
}
of
int comparisonResult = current.getValue().compareTo(t.getValue());
// Code as before
Zonder generieke geneesmiddelen zoude waarden kunnen casten naar Comparable
of toch een algemene Comparator
gebruiken… maar generieke geneesmiddelen zouden een betere gok zijn.
Antwoord 2, autoriteit 83%
Java ondersteunt geen overbelasting van operators, dus de operator <
is niet gedefinieerd voor niet-primitieve typen. In plaats daarvan wilt u waarschijnlijk de Comparable<T>
-interface gebruiken.
Antwoord 3, autoriteit 33%
Je kunt geen objecten vergelijken met >
of <
. Je moet ze vergelijken met een methode, zoals CompareTo (die je moet implementeren).
Antwoord 4, autoriteit 33%
Je kunt twee arbitrage-objecten niet vergelijken met de operator >
. De operator >
kan alleen (direct) worden gebruikt op primitieve integer-typen.
U kunt de objecten die u wilt vergelijken de interface java.lang.Comparable
implementeren en vervolgens de methode compareTo
erop aanroepen om ze te vergelijken.
Comparable left = (Comparable)current.getValue();
Comparable right = (Comparable)t.getValue();
if (left.compareTo(right) > 0)
current.setRight(t);
// etc.
Antwoord 5, autoriteit 17%
De standaardimplementatie van is gelijk aan alleen geeft om referentiegelijkheid. Een object weet niet of Cat groter is dan Apple en het zal het ook niet schelen. U moet een concrete implementatie bieden die zowel gelijken als hashcode overschrijft en de vergelijkbare interface implementeert. Hiermee kun je bepalen of Cat in feite groter is dan Apple.
Antwoord 6
Ik denk dat je gewoon andere primitieve variabelen kunt gebruiken, zoals
int temp=(int)current.getValue();