public String toString() {
if ((parentm == null) && (parentp == null))
return "The cat's name is " + name + ", no mother" + ", no father";
if ((parentp != null) && (parentm == null))
return "The cat's name is " + name + ", no mother" + ", father is " + parentp.name;
if (parentp == null)
return "The cat's name is " + name + ", mother is " + parentm.name + ", no father";
return "The cat's name is " + name + ", mother is " + parentm.name + ", father is " + parentp.name;
Евгений
11 уровень
Задача решена. Когда писал логику вывода на экран, редактор мной написанное компилировать отказывался, и предложил вариант. Рабочий. Интересуют последние три строки.
Обсуждается
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Евгений
17 марта 2021, 10:54
Спасибо.
0
Евгений
17 марта 2021, 08:16
Спасибо. Логику понял. Интересно что редактор сам предложил данный вариант (переделал последние мои два условия). Всегда ли можно доверять тому что он предлагает? Я правильно понял, чтобы ошибки у меня не возникало надо было просто последний if заменить на else?
0
hidden #598481
17 марта 2021, 08:43
По-хорошему, тебе надо все ифы заменить на else if, а последний уже на else.
Это точно нужно в общем случае, когда внутри ифа не команда return, а просто какое-нибудь вычисление, например. Ведь если не писать else, то после завершения первого if начнут проверяться следующие условия, а тебе в этой задаче нужно, чтобы выполнилось ровно одно условие. И еще, если не писать else if, то последний else будет противопоставляться только предыдущему ифу, а с использованием else if компилятору очевидно, что выполнится ровно один из четырех вариантов.
IDEA всегда предлагает тождественные преобразования кода, то есть если ты не ошибся в условиях или действиях до преобразования, то и после него код не станет работать по-другому. Поэтому всегда стоит читать, что предлагает среда, когда выделяет твой код желтым - обычно что-то можно упростить и сделать понятнее.
0
hidden #598481
17 марта 2021, 07:58
А что именно интересует-то?
Если у тебя parentm == null, то гарантированно выполнится либо первое, либо второе условие, и при любом из них произойдет выход из метода (return). То есть до третьего ифа ты можешь дойти, только если parentm не пустое.
Аналогично с parentp. Если он null, то выполнится либо первый, либо третий иф - и произойдет выход из метода. Соответственно до последней строчки ты дойдешь только если parentp не пустой и parentm не пустой.
У тебя не компилировалось, потому что все твои return были завязаны на какое-то условие, т.е. находились внутри ифов. Компилятор не может проверить, что одно из них гарантированно сработает, поэтому считает, что может случиться так, что ни одно условие не выполнится - и в методе не будет точки выхода, поэтому и не дает скомпилировать. Ты мог это указать явно:
Такая запись эквивалентна твоей
0
KIRAРазработчик в prosv.ruExpert
17 марта 2021, 07:58
Существует 4 варианта с родителями.
1. Нет ни отца ни матери
2. Нет матери, есть отец
3. Нет отца, мать проверять нет необходимости ведь если бы ее не было сработал бы пункт 1. Значит мать точно есть
4. Оба родителя есть
0