Co to jest znak zapytania"?"i dwukropek": "Operator używany do? [duplikat]

To pytanie ma już odpowiedź tutaj:

Dwa pytania o używanie znaku zapytania"?"and colon": "operator w nawiasach funkcji print: co robią? Również, czy ktoś zna standardowe określenie dla nich lub Gdzie mogę znaleźć więcej informacji na ich użyć? Czytałem, że są one podobne do stwierdzenia "jeśli ""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();
}
Author: Artjom B., 2012-04-26

7 answers

Jest to trójwarstwowy operator warunkowy , który może być użyty wszędzie, nie tylko w instrukcji print. Czasami nazywany jest po prostu "operatorem trójdzielnym", ale nie jest jedynym operatorem trójdzielnym, tylko najpopularniejszym.

Oto dobry przykład z Wikipedii demonstrujący, jak to działa:

Tradycyjny konstrukt if-else w C, Javie i JavaScript jest napisany:

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

Można to przepisać następująco oświadczenie:

result = a > b ? x : y;

W zasadzie przyjmuje postać:

boolean statement ? true result : false result;

Więc jeśli instrukcja boolean jest prawdziwa, otrzymujesz pierwszą część, a jeśli jest fałszywa, otrzymujesz drugą.

Spróbuj tych, jeśli to nadal nie ma sensu:

System.out.println(true ? "true!" : "false.");
System.out.println(false ? "true!" : "false.");
 250
Author: Brendan Long,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:46

To twierdzenie if/else równające się

if(row % 2 == 1){
  System.out.print("<");
}else{
  System.out.print("\r>");
}
 7
Author: fmucar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-26 15:50:05
a=1;
b=2;

x=3;
y=4;

answer = a > b ? x : y;

answer=4 ponieważ warunek jest false, przyjmuje wartość y.

Znak zapytania (?)
. Wartość do użycia, jeśli warunek jest true

Dwukropek (:)
. Wartość do użycia, jeśli warunek jest false

 3
Author: rbe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-18 20:44:46

Może to może być doskonały przykład dla Androida, na przykład:

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
Author: mehmet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-08 12:51:10

Jest operatorem trójdzielnym i w prostym języku angielskim stwierdza "if row%2 is equal to 1 then return < else return /r"

 1
Author: Anurag Ramdasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-26 15:52:02

Takze chociaz napisalbym odpowiedz na inne zwiazane pytanie, ktore mialem,

a = x ? : y;

Jest równoważne:

a = x ? x : y;

Jeśli X jest false lub null, to pobierana jest wartość y.

 1
Author: moo moo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-19 00:11:57

Nazywane są operatorem trójdzielnym , ponieważ są jedynymi operatorami w Javie.

Różnica w stosunku do if...inaczej konstruuje się, że zwracają coś, a tym czymś może być cokolwiek:

  int k = a > b ? 7 : 8; 
  String s = (foobar.isEmpty ()) ? "empty" : foobar.toString (); 
 0
Author: user unknown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-26 15:51:48