Ich habe den folgenden Code:
%Vor%Wenn ich versuche es zu kompilieren, bekomme ich folgendes:
Ausnahme im Thread "main" java.lang.Error: Ungelöste Kompilierungsprobleme:
Syntaxfehler auf Token ";", erwartet nach diesem Token
Typenkonflikt: kann nicht von void in boolean
konvertiert werdenbei boolq.main (boolq.java:3)
Was mache ich falsch?
Java-Version
Java-Version "1.6.0_15"
Java (TM) SE Laufzeitumgebung (Build 1.6.0_15-b03)
Java HotSpot (TM) Client-VM (Build 14.1-b02, gemischter Modus, Freigabe)
Es gibt tatsächlich zwei Fehler in dieser Anweisung.
%Vor%Wie @Slaks darauf hinweist, das ternäre "?" Operator erfordert, dass der zweite und der dritte Operandenausdruck einen nicht void-Typ haben. Das erklärt die Nachricht
"Typenkonflikt: kann nicht von void in boolean konvertiert werden".
Aber die Nachricht
"Syntaxfehler auf Token"; ", erwartet nach diesem Token"
sagt etwas anderes !! Dies geschieht, weil nicht alle Ausdrücke als Anweisungen in Java verwendet werden können. Kurz gesagt, dies wäre immer noch ein Fehler, selbst nachdem Sie die println Aufrufe durch nicht-void Ausdrücke ersetzt haben.
Der zutreffende Teil der Java-Grammatik sagt folgendes:
%Vor% Beachten Sie, dass der ternäre Ausdruck nicht in der Liste enthalten ist. Der Parser nimmt dann (fälschlicherweise) an, dass Sie versucht haben, ein AssertStatement zu schreiben, und sagen, dass Sie am Anfang der Zeile das Schlüsselwort assert
weggelassen haben.
habe Java schon lange nicht mehr benutzt, aber ich würde diese Syntax verwenden, um das Problem zu lösen:
%Vor%Sie versuchen, einen Ausdruck in einem Anweisungskontext zu verwenden. Probieren Sie:
%Vor%