почему в конце return должен быть не в if-else чтобы выполнялось условие возвращаемого значения String?
почему даже если я вместо String пишу void компилятор показывает ошибку?
Anonymous #2632922
35 уровень
почему требует в конце return или сменить на void?
Решен
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
10 апреля 2022, 09:49
Судя по тому, что я понял, твой метод должен возвращать какую-ту строку, в зависимости от условия, а компилятор говорит, что в конце не хватает return.
Это происходит потому, что на этапе компиляции невозможно проверить, что у тебя условия дополняют друг друга до полного множества вариантов. Это может быть известно тебе, но неизвестно машине. Если это действительно так, то можно смело заменить последний else if (condition) на простой else, т.к. он выполнится, только если ни один из предыдущих вариантов не выполнится.
Если все ветки ифа содержат return, то можно вообще убрать последний if, оставив его содержимое
+2
Anonymous #2632922
10 апреля 2022, 20:57
private String foo() {
if (conditionA()) {
return "a";
}
// если мы до сих пор не вышли из метода, значит ни одно условие не сработало
return "b";}
если мы так напишем то в лбом случае после условия будет выполняться return "b"; что является неправильно
0
hidden #598481
11 апреля 2022, 04:22
Я же написал: "если все ветки ифа содержат return". Это означает, что какая бы ветка не выполнилась, в результате её работы произойдет выход из метода. Это значит, что return "b" выполнится только при оставшемся варианте, который соответствует ветке b
0
Anonymous #2632922
11 апреля 2022, 09:50
а почему так? Ведь условие if заканчивается символом } дальше нет ни else ни if. идет обычный код и там написано return "b";
0
hidden #598481
11 апреля 2022, 10:53
у тебя внутри ифа последняя команда return
Она выполняет выход из метода, возвращая написанное после неё значение.
0
hidden #598481
11 апреля 2022, 11:26
Вот тебе другой пример, менее абстрактный
Пример вывода:
+1
Anonymous #2632922
11 апреля 2022, 12:03
я это понял спасибо. не могу понять другое. Как я знаю последняя строчка
return randomInt + " - это ноль";
находится не в теле if и она выполняется в любом случае. то есть если даже мы выходим после
return randomInt + " - положительное число";
то последняя строчка return randomInt + " - это ноль"; выполняется, потому что перед ней не написано if или else if
0
hidden #598481
11 апреля 2022, 12:40решение
return завершает выполнение метода, насовсем.
Это мгновенный выход из метода при выполнении этой команды. Ты вышел из метода и не доделываешь код, оставшийся после ифа. Метод - это весь блок private static String compareWithZero {...}
+2
Anonymous #2632922
11 апреля 2022, 13:02
а почему компилятор ругается на возвращаемые данные или предлагает сменить на void если последний return поместить в тело if ?
0
hidden #598481
11 апреля 2022, 15:25
Я на это ответил в самом первом комменте:
Это происходит потому, что на этапе компиляции невозможно проверить, что у тебя условия дополняют друг друга до полного множества вариантов. Это может быть известно тебе, но неизвестно машине. Если это действительно так, то можно смело заменить последний else if (condition) на простой else, т.к. он выполнится, только если ни один из предыдущих вариантов не выполнится.
С точки зрения компилятора, если все return внутри ифов может случиться такая ситуация, когда ни один иф не выполнится. Из-за этого методу будет нечего возвращать, то есть в методе буквально не будет точки выхода из него.
А наличие else или безусловного return гарантирует, что выход произойдёт в любом случае, вне зависимости от условий.
0