+ 5

У меня вопрос. Java, модуль Условные операторы и циклы, урок Вложенные операторы if else.

В уроке дан код. Вопрос 1 Для чего нужно столько дополнительных фигурных скобок если программа запускается и без них? Вопрос 2 Почему две командных строки Welcome и Too eung заключены внутри общих фигурных скобок отдельно от командной строки Error? Вопрос 3 Объясните по какому алгоритму и почему выводится 1, 2 и 3 строка при смене оператора соавнения? Почему например при условии истинно выводится 1 строка а не третья и не вторая и так далее? Хочу понять логику и алгоритм.

12th Jun 2018, 2:47 PM
Александр Сараев
Александр Сараев - avatar
4 Réponses
+ 5
Думаю 1 и 3 самый запутанный, я вовсе не писатель, поэтому попробуем так: 1) Допустим вы написали код без скобок и это работает, как вы и сказали. Но if без скобок распространяется только на 1 следующую конструкцию, из-за чего можно легко запутаться. Например: int x = 5, y = 6; if (x == y) // false, поэтому код перейдет к следующему условию System.out.println("equals"); else if (x < y) // true System.out.println("y greater x"); // на экран выведется: y greater x Это будет прекрасно работать, но вдруг если они равны вы решили что-то делать с переменными, например: if (x == y) System.out.println("equals"); y++; else if (x < y) System.out.println("y greater x"); Уже не скомпилируется, поскольку блок кода явно не указан и else if уже ни к чему не относится. А особенно это хорошо видно, когда есть вложенные if'ы и глаза разбегаются, не понимая какое условие к чему относится. Это плохой пример кода, если нужна лишь 1 конструкция - более читабельный вид будет у тернарного оператора (если еще не знакомы, узнаете в будущем) 3) Если Вы разобрались с условием if и else, то здесь ничего сложного. Бывают случаи когда не достаточно одной проверки и на помощь может прийти if else (есть и другие способы конечно). Думаю с блоком if (x>y) {} else {} всё понятно, если условие x>y вернет true, тогда выполнится блок кода if, если же false, тогда else. Что дает else if ? Допустим вам нужно вывести на экран сообщение, о том какое значение больше, можно поступить так: int x=5, y=6; if (x == y) { // поскольку они не равны, интерпретатор прыгнет к следующему условию System.out.println("equals"); } else if (x < y) { // Поскольку условие верное, то он выполнит этот блок кода. System.out.println("y greater x"); } else { System.out.println("x greater y"); // это уже не выполнится, поскольку верное условие найдено. } В коде описана логика, как последовательно проверяются условия, надеюсь стало понятнее =)
14th Jun 2018, 7:35 AM
Medvedev Artem
Medvedev Artem - avatar
+ 3
Понятно. Спасибо что разъяснили. :)
14th Jun 2018, 3:21 PM
Александр Сараев
Александр Сараев - avatar
+ 2
Постараюсь ответить на ваши вопросы, простым языком: 1) Это каноничный вид, фигурные скобки помогают быстро находить границы кода и не ошибиться в случае необходимости добавить дополнительную строку кода, а без них, как вы, наверное, уже знаете, действительна будет только 1 следующая конструкция. 2) Это разные условия, возраст не может быть меньше 0, соответственно дальнейшие проверки не имеют смысла. 3) Это процедурный подход, и стандартный else if. Если истина, тогда выполняет код соответствующий этому условию, иначе проверяет остальные пока не найдет Истину(если найдет, иначе ничего не выполнит или же else, если оно есть). Логика в названии : Если верно тогда, иначе это ( и так по цепочке). Ps: Если не очень понятно, скажите, перефразирую. Также, призываю к использованию английского языка, так вам быстрее помогут =)
13th Jun 2018, 6:11 AM
Medvedev Artem
Medvedev Artem - avatar
+ 2
Спасибо за ответ. :) Если можно немного перефразируйте для большего и лучшего понимания. Поэксперементирую с кодом а с вашими разъяснениями понимание быстрее придет. Английский я не знаю, знаю только алфавит и могу читать, ну и некоторые слова знаю ну а общатся на английском и тем более прочитать разъяснение у меня не получится.:)
13th Jun 2018, 3:44 PM
Александр Сараев
Александр Сараев - avatar