Добрый день,
Прошу уточнить:
В том решении, который предлагают разработчики сайта, первый сверху else принадлежит ближайшему if (nо есть не самому первому if). Таким образом, мы попадаем под "нюансы" условного оператора, указанные во втором пункте предыдущей лекции. На мой взгляд, это задание создано, чтобы проверить навык работы именно с фигурными скобками (без использования ==), но "правильное решение" противоречит "нюансам" условного оператора.
Поправьте меня, если не так.
Alex005
7 уровень
"Нюансы" условного оператора
Решен
Комментарии (14)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Виктор
5 июня 2022, 09:59
смотрите:
один if и 3 условия т.е. мы обрабатываем 3 ситуации a==b, a==c и b==c, но у нас есть еще одно условие: если все 3 числа одинаковые, когда 3 числа могут быть одинаковыми? тогда когда выполняется одно из 3-х условий выше, соответственно в любой внутренний блок надо добавить проверку на равенство всех 3-х перемннных:
жирным - вложенный if и относящийся к нему else
т.е. мы проверяем: если а=b то нам нужно вывести в консоль значения а и b, но ведь возможен вариант когда а=с, а это значит что а=b=с и следовательно нам надо вывести а , b c
ну и соответственно если a!=b то равенство всех трех переменных уже невозможно, но a может быть равен c ИЛИ b может быть равен с
PS Вам ничто не мешает сделать проверку на равенство 3-х переменных в любом из блоков попарных сравнений, главное проверку на равенство 3-х нужно делать только один раз
+1
Alex005
5 июня 2022, 13:18
Уточните, пожалуйста, такой вариант возможен (см ниже)? Проверка не пропускает....
В данном варианте мы переходим к выполнению второй команды блока проверки условия if(a==b) без использования else. И если a равно b, то выводим на печать.
if (a==b){
if(a==c){
System.out.println(a+" "+b+" "+c);
}
System.out.println(a+" "+b);
}
P.S. Уточните также, пожалуйста, вопрос по задаче из примера по "неправильному оформлению" скобок, на который я несколько раз уже ссылался (см ниже). Какой в итоге ответ выведет программа при age=65?
int age = 65;
if (age < 60)
{
if (age > 20)
System.out.println("Надо работать");
else
System.out.println("Можно не работать");
}
0
Виктор
5 июня 2022, 16:14
так точно нельзя, или else или else-if
0
Виктор
5 июня 2022, 16:17
если это весь код
то он ничего не выведет, тк if (age < 60)
чтобы сработало 65, в этом коде нужен еще один if
ну а если хотите проще, то просто напишите
там по условию вроде как я помню от 20 до 60 возраст - ничего выводить не надо, но если бы нужно было - то просто добавили бы else 0
Alex005
5 июня 2022, 16:52
У меня иначе выглядела конструкция:
if (a==b){
if(a==c){
System.out.println(a+" "+b+" "+c);
}
System.out.println(a+" "+b);
}
Идея такая, чтобы при выполнении условия if (a==b) программа исполняла несколько команд, объединённых в блок фигурными скобками.
Команда1 - это вложенный условный оператор без else:
if(a==c) {
System.out.println(a+" "+b+" "+c);
}
Команда 2 - это вывод на печать a+b:
System.out.println(a+" "+b);
0
Виктор
5 июня 2022, 17:00
ну нельзя так писать:
if(){
код
} ЗДЕСЬ ДОЛЖЕН БЫТЬ ELSE!!!
{
код
}
https://metanit.com/java/tutorial/2.5.php
0
Alex005
5 июня 2022, 08:50
Добрый день,
Благодарю за ответ.
К сожалению, не могу понять Ваш ответ. Возможно, он замечательный, но не для моего уровня elementary.
Ниже я скопировал образец из лекции 4, уровень 3 под названием "Нюансы условного оператора". В этом примере при возрасте 65 лет программа выводит текст "надо работать", так как неправильно расставлены фигурные скобки. То есть else относится ко второму if.
int age = 65;
if (age < 60)
{
if (age > 20)
System.out.println("Надо работать");
else
System.out.println("Можно не работать");
}
Теперь я смотрю пример, который предлагают разработчики сайта, где скобки расставлены аналогично указанному выше примеру. То есть else принадлежит ко второму if.
if (number1 == number2)
{
if (number1 == number3)
{
System.out.println(number1 + " " + number2 + " " + number3);
}
else
{
System.out.println(number1 + " " + number2);
}
}
0
hidden #598481
5 июня 2022, 09:03
Это не пример, предлагаемый разработчиками, а просто одно из пользовательских решений прошедших проверку.
Решение это ничем не противоречит.
else всегда относится к тому условному блоку, после которого оно написано.
Если у условного блока if нет фигурных скобок, то тело условного блока состоит из одной команды, написанной после if.
Если есть фигурные скобки, то else должно идти сразу после закрывающей фигурной скобки.
Вот так нельзя:
такой код не скомпилируется, т.к. else ни к чему не относится, нужны фигурные скобки объединяющие две команды.
Вообще рекомендую всегда из ставить, даже когда тело условного блока / цикла состоит из одной команды. Просто гораздо ниже шанс запутаться. 0
Alex005
5 июня 2022, 09:40
Благодарю за ответ, но ответа на мой вопрос, к сожалению, так и нет.
Вопрос: чем отличаются две программы, указанные ниже? Одна из них обозначена как "неправильная" в лекции 4, уровня 3. Другая (с цифрами) указана как "правильная", хотя по внешнему виду и структуре они идентичны.
Первая "неправильная"
int age = 65;
if (age < 60)
{
if (age > 20)
System.out.println("Надо работать");
else
System.out.println("Можно не работать");
}
Вторая "правильная"
if (number1 == number2)
{
if (number1 == number3)
{
System.out.println(number1 + " " + number2 + " " + number3);
}
else
{
System.out.println(number1 + " " + number2);
}
}
0
Алексей Погонин
5 июня 2022, 10:02
Цель второй программы проверить сколькт переменных совпадает, она выполняет свой функционал. У первой программы задача отличается, она должна принимать возраст и выводить сообщение, в пределах первого условия она работает. Но если возраст более 60, она не зацдет в первый блок и не выведет "Можно не работать". Для коректности нужен еще один блок else.
0
hidden #598481
5 июня 2022, 18:32
Неправильная программа не напишет, что можно не работать, если возраст меньше 20
0
Виктор
5 июня 2022, 06:23
Если Вам проще воспринимать во вложенном виде, то то что написано это аналог:
по идее дальше должны быть еще два else if а на проверку оставшихся двух условий 0
Alex005
4 июня 2022, 22:21
Речь об этом:
if (number1 == number2)
{
if (number1 == number3)
{
System.out.println(number1 + " " + number2 + " " + number3);
}
else
{
System.out.println(number1 + " " + number2);
}
}
0
Aman Efer
10 июня 2022, 00:15
Смотри, дружище
Давай пойдем от обратного. Представим, что первое условие не выполняется (т.е. "а" не равно "b"). В этом случае пропускается блок, находящийся внутри красных фигурных скобок. Этот блок полностью относится к первому if. Т.к. условие не выполняется, то нас перекидывает на следующее условие else if (a == c), и программа проверяет выполнится ли это условие. И так далее.
Теперь про пример из лекции
Как ты помнишь, если фигурные скобки не стоят, то else будет относится к ближайшему предыдущему if. А в лекции ранее говорилось про сокращенный оператор if-else. Т.е. если условие истинно, то команда выполняется, а если условие ложно, то ничего не нужно выполнять, поэтому else можно не писать.
Таким образом в данном примере else относится ко второму if (age > 20). А вот у первого if уже нет своего else. Т.е. если мы указываем age равен или больше 60, то условие ложно, и на экран ничего не будет выведено, т.к. никакой команды в этом случае не задано.
Проблема в том, что ты пытаешься наложить задачу со сравнением чисел на пример про возраст из лекции. Но это абсолютно разные задачи. В примере из лекции у if нет своего else, а в задаче есть. Поэтому у тебя логика и не сходится.


0