2012-04-26 14 views
98

Zwei Fragen zur Verwendung eines Fragezeichens "?" und Doppelpunkt ":" Operator in den Klammern einer Druckfunktion: Was machen sie? Kennt jemand den Standardbegriff für sie oder wo finde ich weitere Informationen zu ihrer Verwendung? Ich habe gelesen, dass sie einer 'if' 'else' Aussage ähnlich sind.Was ist ein Fragezeichen "?" und Doppelpunkt ":" Operator verwendet für?

int row = 10; 
int column; 
while (row >= 1) 
{ 
    column = 1; 
    while(column <= 10) 
    { 
     System.out.print(row % 2 == 1 ? "<" : "\r>"); 
     ++column; 
    } 
    --row; 
    System.out.println(); 
} 
+8

Hinweis: Der ternäre Operator ist nicht Java-spezifisch. –

Antwort

241

Dies ist die ternary conditional operator, die überall dort eingesetzt werden kann, nicht nur die print-Anweisung. Es wird manchmal nur "der ternäre Operator" genannt, aber it's not the only ternary operator, nur der häufigste.

Hier ist ein gutes Beispiel von Wikipedia zeigt, wie es funktioniert:

Ein traditionelles if-else in C, Java und JavaScript-Konstrukt steht geschrieben:

if (a > b) { 
    result = x; 
} else { 
    result = y; 
} 

Diese wie folgt neu geschrieben werden können Erklärung:

result = a > b ? x : y; 

Grundsätzlich nimmt sie die Form:

boolean statement ? true result : false result; 

Also, wenn die Boolesche Aussage wahr ist, können Sie den ersten Teil bekommen, und wenn es Ihnen die zweite falsch ist zu bekommen.

diese versuchen, wenn das noch keinen Sinn macht:

System.out.println(true ? "true!" : "false."); 
System.out.println(false ? "true!" : "false."); 
+22

+1 für diesen letzten Codeblock. Wenn das die Dinge nicht erklärt, wird das nichts. –

+5

Ternärer Operator bezieht sich auf jeden Operator mit drei Parametern, also ist dies * ein * ternärer Operator, aber nicht * der * ternäre Operator. Die wichtigsten Sprachen (C#, Java, PHP) betrachten es als * a * bedingten Operator und nennen es * den Operator *?:. Gelegentlich (JavaScript) heißt es * der * bedingte Operator. – Sheepy

+0

@Sheepy Danke, ich habe die Antwort aktualisiert. –

7

Das ist eine if/else-Anweisung equilavent zu

if(row % 2 == 1){ 
    System.out.print("<"); 
}else{ 
    System.out.print("\r>"); 
} 
0

Sie den ternären Operator genannt werden, da sie die einzige sind eine in Java.

Der Unterschied zu der if ... else-Konstrukt ist, dass sie etwas zurückgeben, und das ist etwas kann alles sein:

int k = a > b ? 7 : 8; 
    String s = (foobar.isEmpty()) ? "empty" : foobar.toString(); 
1

es ist ein ternärer Operator und in einfachem Englisch heißt es "if row%2 is equal to 1 then return < else return /r"

1

auch nur wenn ich die Antwort auf eine andere Frage im Zusammenhang veröffentlichen würde ich hatte

a = x ? : y; 

entspricht:

a = x ? x : y; 

Wenn x falsch oder null ist, wird der Wert von y genommen.

+2

Welche Sprache? Nicht in Java. – iamnotmaynard

+0

Das kann aber nicht in Java sein. –

+0

Ich arbeite in Java und ja das funktioniert. –

2

Vielleicht für Android, kann es Zum Beispiel perfektes Beispiel sein:

void setWaitScreen(boolean set) { 
    findViewById(R.id.screen_main).setVisibility(
      set ? View.GONE : View.VISIBLE); 
    findViewById(R.id.screen_wait).setVisibility(
      set ? View.VISIBLE : View.GONE); 
} 
3
a=1; 
b=2; 

x=3; 
y=4; 

answer = a > b ? x : y; 

answer=4 da die Bedingung falsch ist es dauert y-Wert.

Ein Fragezeichen (?)
. Der zu verwendende Wert, wenn die Bedingung wahr ist

Ein Doppelpunkt (:)
. Der zu verwendende Wert, wenn die Bedingung falsch ist

Verwandte Themen