Как я могу превратить это утверждение в троичный? - PullRequest
2 голосов
/ 30 мая 2019

Я пытаюсь превратить простое утверждение if / else в троицу для практики, и у меня возникли проблемы. Из того, что я понимаю, логика такова:

condition ? (action to take if condition is true) : (action if false);

Мое состояние if(result == 8).

Я уже пробовал:

result == 8 ? return true : return false;

и

result = 8 ? return true : return false;

Вот мой код, конец которого я хотел бы преобразовать

public boolean sum28(int[] nums) {

    int result = 0;
    for(int i=0; i<nums.length; i++) {
        if(nums[i] == 2) {
            result+=2;
        }
    }
    if(result == 8) {
        return true;
    }
    return false;
}

Я получаю несоответствие типов: не могу преобразовать из int в логическое значение, когда я использую только 1 знак равенства, и получить недопустимый токен "==" при использовании двух.

Ответы [ 3 ]

8 голосов
/ 30 мая 2019
condition ? (action to take if condition is true) : (action if false);

Тернарный оператор не является полноценной заменой if / else.Две альтернативы должны быть выражениями, а не утверждениями.Лучше думать об этом как:

condition ? (result if true) : (result if false)

Результатом оператора является значение, которое затем может быть использовано в большом выражении.Чтобы использовать его в выражении return, вам нужно поставить return в начале.

return result == 8 ? true : false;

Обратите внимание, что это проще написать без троичного оператора.

return result == 8;
7 голосов
/ 30 мая 2019

Правильный синтаксис будет

return (result == 8) ? true : false;

но здесь вы можете просто

return result == 8;
6 голосов
/ 30 мая 2019

Я уже пробовал: результат == 8?верните истину: верните ложь;

Вы не слишком далеко.== приводит к логическому значению, поэтому вам просто нужно:

return result == 8;

Это работает, потому что у вас уже есть значение (true или false), которое вы хотите вернуть;это результат result == 8.

Аналогично, если бы ваш оригинал был наоборот (if (result == 8) { return false; } else { return true; }), вы бы использовали !=:

// If you wanted the opposite
return result != 8;

В более общем случае предположим, что вы хотите вернуть "A", если result == 8 и "B" в противном случае.Вы бы сделали это так:

// If you wanted to return "A" (if result == 8) or "B" (if not)
return result == 8 ? "A" : "B";
...