2012-04-26 7 views
98

Dos preguntas sobre el uso de un signo de interrogación "?" y colon ":" operador dentro del paréntesis de una función de impresión: ¿Qué hacen? Además, ¿alguien sabe el término estándar para ellos o dónde puedo encontrar más información sobre su uso? He leído que son similares a una declaración 'if' 'else'.¿Qué es un signo de interrogación "?" y Colon ":" ¿Se usó el operador?

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

FYI: el operador ternario no es específico de Java. –

Respuesta

241

Este es el ternary conditional operator, que puede ser utilizado en cualquier lugar, no sólo la sentencia de impresión. A veces se llama simplemente "el operador ternario", pero it's not the only ternary operator, solo el más común.

Aquí es un buen ejemplo de Wikipedia que muestra cómo funciona:

Un tradicional si-else en C, Java y JavaScript está escrito:

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

Esto puede reescribirse como la siguiente declaración:

result = a > b ? x : y; 

Básicamente se toma la forma:

boolean statement ? true result : false result; 

Así que si la expresión booleana es verdadera, se obtiene la primera parte, y si es falso que presentamos lo mejor segundo.

Pruebe estos si que todavía no tiene sentido:

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

+1 para ese último bloque de código. Si eso no explica las cosas, nada lo hará. –

+5

Operador ternario se refiere a cualquier operador con tres parámetros, por lo tanto este es * un * operador ternario pero no * el * operador ternario. Los principales idiomas (C#, Java, PHP) lo consideran * a * operador condicional y lo llaman * el * operador:. Ocasionalmente (JavaScript) se llama * el * operador condicional. – Sheepy

+0

@Sheepy Gracias, actualicé la respuesta. –

7

Ésta es una sentencia if/else equilavent a

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

Se llaman el operador ternario ya que son el único uno en Java.

La diferencia con el caso ... lo demás es construcción, que se vuelvan algo, y ese algo puede ser cualquier cosa:

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

que es un operador ternario y sencilla en Inglés Afirma "if row%2 is equal to 1 then return < else return /r"

1

también a pesar de que había puesto la respuesta a otra pregunta relacionada con lo que tenía,

a = x ? : y; 

es equivalente a:

a = x ? x : y; 

Si x es falso o nulo, se toma el valor de y.

+2

¿Qué idioma? No en Java. – iamnotmaynard

+0

Eso puede ser pero no en Java. –

+0

Estoy trabajando en Java y sí, esto funciona. –

2

tal vez puede ser perfecto ejemplo para Android, Por ejemplo:

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 ya que la condición es falsa y que se necesita valor.

Un signo de interrogación (?)
. El valor que se debe usar si la condición es verdadera

A dos puntos (:)
. El valor a usar si la condición es falsa

Cuestiones relacionadas