Условный оператор Java три возможных результата - PullRequest
0 голосов
/ 02 июля 2019

Как разбить условный код, который вы можете увидеть ниже, на регулярное if -статейное заявление, чтобы понять, как оно работает, поскольку у него есть три результата.

Я изменил значения, чтобы посмотреть, куда он движется:

System.out.print(("A"=="A")?("B"=="B")?"1":"2":"3");


 /*
 if A is False (Output = 3)
 if B is False (Output = 2)
 if A&B are True (Output = 1)
 */

Ответы [ 3 ]

2 голосов
/ 02 июля 2019

Ваш код может быть разделен следующим образом:

String message;
if ("A" == "A") {
    if ("B" == "B") {
        message = "1";
    } else {
        message = "2";
    }
} else {
    message = "3";
}
System.out.print(message);

Тернарный оператор работает как if -статист, который возвращает значение.Однако это могут быть только места, где выражение может стоять, поэтому оно не может стоять само по себе.Часть перед ? является условием, а часть после - выражением then.За : стоит выражение else.Вложенные троичные ?: операторы очень плохо читаются, и их определенно следует избегать.

1 голос
/ 02 июля 2019

Если я правильно вас понимаю и A, B и C - логические значения, это может быть тем, что вы хотите:

System.out.print( ((!A)? "3" : (!B)? "2" : "1"));

Для строк вы должны обязательно использовать A.equals (B).

1 голос
/ 02 июля 2019

Условный (троичный) оператор работает следующим образом:

(предикат)? (onTrueValue): (onFalseValue);

так что в вашем случае мы имеем:

("A"=="A" ? ("B"=="B" ? "1" : "2") : "3");

Что означает:

Is A equal to A? 
If yes -> return Is B equal to B
    If yes -> return 1;
    If no -> return 2;
If no -> return 3;

Аналогично:

condition1 ? (condition2 ? val1 : val2) : val3;

И некоторые тесты для проверки

// Prints 1 as both conditions are true.
System.out.println("A"=="A" ? ("B"=="B" ? "1" : "2") : "3");
// Prints 3 as first condition fails.
System.out.println("A"=="notA" ? ("B"=="B" ? "1" : "2") : "3");
// Prints 2 as second condition fails.
System.out.println("A"=="A" ? ("B"=="notB" ? "1" : "2") : "3");

Также обратите внимание, что вы используете оператор == для сравнения строк. В этом конкретном случае это не даст никакой разницы, просто используйте его с осторожностью ...

...