2012-08-17 40 views
5

No sé qué significa el signo de interrogación (?) en java, estaba haciendo un pequeño programa, un Nim-game. estaban buscando en un libro, en busca de ayuda y vio esta declaración:¿Qué significa "?" significa en Java?

int pinsToTake = (min >= 2) ? 2 : 1; 

No entiendo, ¿qué va a representar ?, puede ser algo que ver con la sentencia if-pero lo puso en una variable? y el : puede ser algo "más"? (estas cosas que acabo de decir pueden ser muy engañosas)

+0

Ver [?:] (Https://en.wikipedia.org/wiki/%3F :). –

Respuesta

21

someval = (min> = 2)? 2: 1;

Esto se llama operador ternario, que se puede utilizar como if-else. esto es equivalente a

if((min >= 2) { 
    someval =2; 
} else { 
    someval =1 
} 

Siga este tutorial para obtener más información y su uso.

+0

¡¡¡POR QUÉ GRACIAS, señor! – Alexein

+9

@Alexein: no agradecer, [aceptar] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) :-) –

6

Su ternary operator también conocida como la operador condicional, echar un vistazo reference

como Object bar = foo.isSelected() ? getSelected(foo) : getSelected(baz);

por ejemplo. operand1 ? operand2 : operand3

  • si operando1 es cierto, se devuelve operando2, se devuelve otra cosa operand3
  • operando1 debe ser un tipo booleano
  • operando1 puede ser una expresión que se evalúa como un tipo booleano
  • operando1 y operand2 debe ser tipos numéricos promocionables o referencias de objetos convertibles, o nulo
  • si uno de los operandos2 o operandos3 es un byte y el otro un cortocircuito, el tipo del valor devuelto será un corto
  • si uno de operando2 o operando3 es un byte, corto o char y el otro es un valor int constante que se ajustará dentro del rango de otros operandos , el tipo del valor devuelto será el tipo del otro operando
  • lo contrario, promoción numérica binaria normal se aplica
  • si uno de operando2 o operand3 es un valor nulo, el tipo de la devolución será el tipo del otro operando
  • si ambos operando2 y operand3 son diferentes tipos, uno de ellos debe ser compatible (moldeable) con el otro tipo reference
0

"? : "es un operador ternario equivalente a una instrucción if else.

En su ejemplo:

pinsToTake = (min >= 2) ? 2 : 1 

si min> = 2 a continuación, asignar 2 a pinsToTake, de lo contrario asignar 1

0
max = (a > b) ? a : b; 

(a> b)? a: b; es una expresión que devuelve uno de dos valores, a o b.
Se prueba la condición, (a> b). Si es verdadero, se devuelve el primer valor, a. Si es falso, se devuelve el segundo valor, b.
Cualquiera que sea el valor devuelto depende de la prueba condicional, a> b. La condición puede ser cualquier expresión que devuelva un valor booleano.

0

Se llama operador condicional. Así es como funciona. si min es mayor o igual que 2, luego primer valor después? eso es 2 aquí se asignará a la variable correspondiente, de lo contrario se asignará el segundo valor que es 1 aquí.

0

This link le dirá todo lo que necesita.

Resumen por el amor de archivo:

Se llama el operador condicional. Es un operador ternario que toma tres términos:

Expresión booleana? Expr1: Expr2

Se evalúa BooleanExpression. Si es verdadero, el valor de la expresión completa es Expr1. Si es falso, el valor de la expresión completa es Expr2.

Por lo tanto, cumple la misma función que una sentencia if, pero es un término en lugar de un enunciado completo. Eso significa que puede incrustarlo en lugares donde no puede usar una declaración completa.

4

Operador Ternario. Check Oracle's doc para más información. Para abreviar, es una declaración if-else que se puede hacer en una sola línea y usar dentro de métodos y para definir valores variables.

Sintaxis:

boolean_expression ? do_if_true : do_if_false; 

paralelismo con la sentencia if-else:

if(boolean_expression) 
    //do_if_true; 
else 
    //do_if_false; 

no hizo uso de soportes a propósito, ya que sólo se puede ejecutar una línea de código en do_if_true y do_if_false.

Ejemplo de uso:

boolean hello = true; 
String greetings = hello ? "Hello World!" : "No hello for you..."; 

Esto establecerá someString como "Hello World!" ya que la variable booleana hello evalúa a verdadero.Por otro lado, puede anidar esta expresiones:

boolean hello = true; 
boolean world = false; 

String greetings = hello ? (world ? "Hello World!" : "Hello Stranger!") : "No hello for you..."; 

En este caso, saludos tendrá como valor "Hello Stranger!";