Ich habe diesen Code:
%Vor%Und jedes Mal, wenn ich diesen Code ausführe, erhalte ich folgende Fehlermeldung:
%Vor%Ich verwende OpenJDK7u3 und gebe 0 zurück, wenn die Objekte gleich sind. Kann mir jemand diesen Fehler erklären?
Sie könnten in diese Situation kommen, wenn Sie irgendwelche NaN-Werte haben:
Zum Beispiel:
%Vor% Alle dieser print false
. Sie könnten also in eine Situation geraten, in der zwei Nicht-NaN-Werte beide als "gleich" zu NaN angesehen wurden, aber einer größer war als der andere. Grundsätzlich sollten Sie herausfinden, wie Sie mit NaN-Werten umgehen wollen. Überprüfen Sie auch, dass das wirklich das Problem ist, natürlich ... wollen Sie wirklich NaN-Werte für Ihre Fitness?
Wahrscheinlich ist Ihre Fitnessfunktion auf zwei Arten kaputt:
compareTo()
ist in Gegenwart von NaNs nicht transitiv, wie von Jon Skeet erklärt. Sie könnten Ihre Vergleichsfunktion mit Double.compare()
neu schreiben:
Dies erfordert weniger Code und kümmert sich um Eckfälle (NaNs, die negative Null usw.). Natürlich, ob diese Eckfälle in erster Linie entstehen sollten, ist für Sie zu entscheiden und zu adressieren.
Sie sollten versuchen, if (this == o) return 0;
hinzuzufügen.
Weil das gleiche Objekt gleich zurückgegeben werden muss.
Tags und Links java openjdk comparable