Просто маленький вопрос о логике.Почему они эквивалентны? - PullRequest
0 голосов
/ 14 октября 2018

Думаю, я бы снова начал учиться кодировать, так что быстрый вопрос.Почему и как это:

if (n1 >= 13 && n1 <= 19 || n2 >= 13 && n2 <= 19 || n3 >= 13 && n3 <= 19) {
            return true;
    }

и это:

return n1 >= 13 && n1 <= 19 || n2 >= 13 && n2 <= 19 || n3 >= 13 && n3 <= 19;

Эквивалент?Кто-нибудь хочет объяснить мне логику?

Ответы [ 3 ]

0 голосов
/ 14 октября 2018

В вашей 1-й версии, если выражение:

(n1 >= 13 && n1 <= 19 || n2 >= 13 && n2 <= 19 || n3 >= 13 && n3 <= 19)

равно true, затем возвращается true, если его false, то ничего не возвращается.Ваша вторая версия возвращает значение вышеприведенного выражения true или false.
Так что они не эквивалентны.Если вы измените 1-ую версию на:

if (n1 >= 13 && n1 <= 19 || n2 >= 13 && n2 <= 19 || n3 >= 13 && n3 <= 19) {
    return true;
} else {
    return false;
}

тогда они эквивалентны.

0 голосов
/ 14 октября 2018

Взгляните на оператор if,

if(condition)

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

Теперь ваше следующее утверждение рассматривается как condition,

(n1 >= 13 && n1 <= 19 || n2 >= 13 && n2 <= 19 || n3 >= 13 && n3 <= 19)

, оно может возвращать либо true, либо false.Оба они boolean с.Таким образом, вы можете указать это непосредственно с помощью return.


Однако вы не упомянули, что произойдет, если данное условие не выполнится или вернет false.Ваш код может иметь несколько других строк после оператора if.В таком случае это не будет эквивалентно, и даст ошибку компиляции, говорящую unreachable statement после,

return n1 >= 13 && n1 <= 19 || n2 >= 13 && n2 <= 19 || n3 >= 13 && n3 <= 19;
0 голосов
/ 14 октября 2018

Первый вернет true только если условие true, тогда как второй вернет результат независимо.

Чтобы ответить на ваш вопрос, они эквивалентны в том смысле, что оба подхода дадуттот же логический результат, когда условие n1 >= 13 && n1 <= 19 || n2 >= 13 && n2 <= 19 || n3 >= 13 && n3 <= 19 оценивается как true.

...