Was mache ich falsch mit Bedingungsoperatoren? [Duplikat]

8

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 werden      

bei 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)

    
Jakob Cosoroaba 06.01.2010, 00:48
quelle

5 Antworten

20

Der ternäre Operator ist ein Ausdruck und berechnet einen der beiden Werte, die Sie übergeben.

Da System.out.println keinen Wert zurückgibt, können Sie es nicht in den ternären Operator einfügen.

Sie müssen System.out.println(isTrue ? "true" : "false");

schreiben     
SLaks 06.01.2010, 00:51
quelle
8

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.

    
Stephen C 06.01.2010 01:24
quelle
4

habe Java schon lange nicht mehr benutzt, aber ich würde diese Syntax verwenden, um das Problem zu lösen:

%Vor%     
Marek Karbarz 06.01.2010 00:51
quelle
3

Sie versuchen, einen Ausdruck in einem Anweisungskontext zu verwenden. Probieren Sie:

%Vor%     
Greg Hewgill 06.01.2010 00:51
quelle
1

Wenn Sie es immer noch mit "short if" machen möchten, versuchen Sie Folgendes:

%Vor%     
nadZuha 24.05.2012 05:31
quelle

Tags und Links