+ 5
У меня вопрос. Java, модуль Условные операторы и циклы, урок Вложенные операторы if else.
В уроке дан код. Вопрос 1 Для чего нужно столько дополнительных фигурных скобок если программа запускается и без них? Вопрос 2 Почему две командных строки Welcome и Too eung заключены внутри общих фигурных скобок отдельно от командной строки Error? Вопрос 3 Объясните по какому алгоритму и почему выводится 1, 2 и 3 строка при смене оператора соавнения? Почему например при условии истинно выводится 1 строка а не третья и не вторая и так далее? Хочу понять логику и алгоритм.
4 Answers
+ 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"); // это уже не выполнится, поскольку верное условие найдено.
}
В коде описана логика, как последовательно проверяются условия, надеюсь стало понятнее =)
+ 3
Понятно. Спасибо что разъяснили. :)
+ 2
Постараюсь ответить на ваши вопросы, простым языком:
1) Это каноничный вид, фигурные скобки помогают быстро находить границы кода и не ошибиться в случае необходимости добавить дополнительную строку кода, а без них, как вы, наверное, уже знаете, действительна будет только 1 следующая конструкция.
2) Это разные условия, возраст не может быть меньше 0, соответственно дальнейшие проверки не имеют смысла.
3) Это процедурный подход, и стандартный else if. Если истина, тогда выполняет код соответствующий этому условию, иначе проверяет остальные пока не найдет Истину(если найдет, иначе ничего не выполнит или же else, если оно есть). Логика в названии : Если верно тогда, иначе это ( и так по цепочке).
Ps: Если не очень понятно, скажите, перефразирую. Также, призываю к использованию английского языка, так вам быстрее помогут =)
+ 2
Спасибо за ответ. :) Если можно немного перефразируйте для большего и лучшего понимания. Поэксперементирую с кодом а с вашими разъяснениями понимание быстрее придет. Английский я не знаю, знаю только алфавит и могу читать, ну и некоторые слова знаю ну а общатся на английском и тем более прочитать разъяснение у меня не получится.:)