Тернарный оператор вместо конструкции if-else (2)

295
04 февраля 2018, 01:06

Задался вот этим вопросом.(там тоже самое ввиде ответа удалю)

Просто интересно. Есть ощущение что я не прав, не могу уловить где.

Первая часть условия

swap(chars, leftElementIndex, rightElementIndex);
leftElementIndex++;
rightElementIndex--;

выполнится, если

isLeftLetter && isRightLetter

есть

true && true

Вторая часть условия

if (!isLeftLetter) {
    leftElementIndex++;
}
if (!isRightLetter) {
    rightElementIndex--;
}

выполнится если

isLeftLetter && isRightLetter

есть сочетания

true && false
false && true
false && false

Во второй части isLeftLetter и isRightLetter переворачиваются

false <- !true <-     true && false    -> !false -> true
true <- !false <-     false && true    -> !true -> false
true <- !false <-     false && false   -> !false -> true

Выходит, что во второй части условия

leftElementIndex++;
rightElementIndex--;

выполняются независимо от того

isLeftLetter  - true или false
isRightLetter  - true или false

значит все условие можно свести к

if (isLeftLetter && isRightLetter) {
    swap(chars, leftElementIndex, rightElementIndex);
    leftElementIndex++;
    rightElementIndex--;
} else {         
    leftElementIndex++;
    rightElementIndex--;
}

тогда зачем повторяться? может так? Поправьте меня пжл если выводы мои неправильны.

if (isLeftLetter && isRightLetter) {
    swap(chars, leftElementIndex, rightElementIndex);
}
    leftElementIndex++;
    rightElementIndex--;
Answer 1

Наглядно:

for (int i = 0; i < 4; i++) {
    boolean a = (i & 1) == 1;
    boolean b = (i & 2) == 2;
    System.out.println("a = " + a + ", b = " + b);
    if (a && b) {
        System.out.println("Run a && b");
    } else {
        if (!a) {
            System.out.println("Run !a");
        }
        if (!b) {
            System.out.println("Run !b");
        }
    }
    System.out.println();
}

Результат:

a = false, b = false
Run !a
Run !b
a = true, b = false
Run !b
a = false, b = true
Run !a
a = true, b = true
Run a && b
READ ALSO
Write me a function that receives three integer inputs [требует правки]

Write me a function that receives three integer inputs [требует правки]

Write me a function that receives three integer inputs for the lengths of the sides of a triangle and returns one of four values to determine the triangle type (1=scalene, 2=isosceles, 3=equilateral, 4=error)

201
Как определить тип дженерик аргумента в java?

Как определить тип дженерик аргумента в java?

Можно ли собственно получить тип N наподобиеgetClass()

229
Как проверить играет ли музыка в mediaPlayer?

Как проверить играет ли музыка в mediaPlayer?

Пробовал использовать этот код, но ничего не заработалоМожет есть еще способы, как проверить играет ли музыка?

214