web-dev-qa-db-fra.com

Qu'est-ce qu'un point d'interrogation "?" et deux points ":" Opérateur utilisé pour?

Deux questions sur l'utilisation d'un point d'interrogation "?" et deux-points ":" opérateur entre les parenthèses d'une fonction d'impression: que font-ils? Aussi, est-ce que quelqu'un connaît le terme standard pour eux ou où je peux trouver plus d'informations sur leur utilisation? J'ai lu qu'elles ressemblent à une déclaration 'if' 'else'.

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();
}
112
Deepend

Il s'agit de l'opérateur conditionnel ternary , qui peut être utilisé n'importe où, pas seulement l'instruction print. On l'appelle parfois simplement "l'opérateur ternaire", mais ce n'est pas le seul opérateur ternaire , mais le plus courant.

Voici un bon exemple de Wikipedia montrant comment cela fonctionne:

Une construction traditionnelle if-else en C, Java et JavaScript est écrite:

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

Cela peut être réécrit comme la déclaration suivante:

result = a > b ? x : y;

Fondamentalement, il prend la forme:

boolean statement ? true result : false result;

Donc, si la déclaration booléenne est vraie, vous obtenez la première partie et si elle est fausse, la seconde.

Essayez-les si cela n'a toujours pas de sens:

System.out.println(true ? "true!" : "false.");
System.out.println(false ? "true!" : "false.");
262
Brendan Long

C'est une déclaration if/else équivalente à

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

x=3;
y=4;

answer = a > b ? x : y;

answer=4 puisque la condition est fausse, elle prend la valeur y.

Un point d'interrogation (?)
. La valeur à utiliser si la condition est vraie

Deux points (:)
. La valeur à utiliser si la condition est fausse

3
rbe

Peut-être que cela peut être un exemple parfait pour Android, Par exemple:

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);
}
2
mehmet

Aussi juste si je posterais la réponse à une autre question connexe que j'avais,

a = x ? : y;

Est équivalent à:

a = x ? x : y;

Si x est false ou null, la valeur de y est prise.

1
moo moo

c'est un opérateur ternaire et dans un anglais simple, il est écrit "if row%2 is equal to 1 then return < else return /r"

1
Anurag Ramdasan

Ils s'appellent l'opérateur ternaire car ils sont les seuls en Java. 

La différence avec la construction if ... else est qu'ils renvoient quelque chose, et que ce quelque chose peut être n'importe quoi: 

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