Программирование в Java 4
Как вы знаете программа выполняет все операции сверху-вниз
А что делать если программа должна в одном случае работать по одному, во втором по другому? Для решение этой проблемы изучим следующую тему.
Ветвления или Условные конструкции
Выражение if - (переводится как "если"), при помощи этого оператора мы можем выполнять блок кода, если условие верно.
Синтаксис:
if (Условие) { // Code }
Для работы с ветвлением нужно разобраться с еще одним типом данных и его операциями.
Логический Тип
boolean, он же логический тип
Данный тип работает только с двумя значениями - true (правда), false (ложь).
Пример:
Создадим переменную логического типа со значением true
boolean a = true;
Операции с логическим типом или Условные выражения
Все ниже перечисленные операции являются бинарными (работают только с двумя значениями) и всегда возвращают значения типа boolean, true - если условие верно, false - если не верно.
Сравнение на равенство, оператор "==".
- true - если значение ровны
- false - если значения разные
Обратите внимания, что "=" - это оператор присваивания значения, а "==" - это оператор равенства. Это одна из самых распространенных ошибок начинающих программистов. Пожалуйста не путайте их.
Примеры:
boolean a = 10 == 11;
Переменная а, будет ровна false.
Сравнение на неравенство, оператор "!=".
Полная противоположность оператора равенства.
- true - если значение разные
- false - если значения ровны
Примеры:
boolean a = 10 != 11;
Переменная а, будет ровна true.
Рассмотрим сразу несколько операторов, так как они очень похожи (к тому же их вы все знаете со школы)
- > - больше
- < - меньше
- >= - больше-ровно
- <= - меньше-ровно
Надеюсь, что вы и без меня понимаете как с ними работать.
Но все же вот пару примеров:
boolean a = 1 > 10; // false boolean b = 2 < 2; // false
А теперь не большой привет от математической логики. Не пугаемся, все нормально, ничего сложного.
Логическое И - "&&" - Конъюнкция
- Если два значения true - true
- В любой другом случае - false
Пример:
boolean a = true && true; // true boolean b = false && true; // false
Логическое ИЛИ - "||" - Дизъюнкция
- Если любое из значений ровно true - true
- В любой другом случае - false
Пример:
boolean a = true || true; // true boolean b = false || true; // true boolean c = false || false; // false
Логическое Исключающая ИЛИ (ЛИБО) - "^" - Строгая дизъюнкция
Честно говоря, этот оператор используется крайне редко (если конечно, речь идет не о криптографии), но все же стоит его знать.
- Если одно из значений будет true (но не одновременно) - false.
- в любом другом случае - false.
Пример:
boolean a = true ^ false; // true boolean b = true ^ true; // false
Логическое НЕ - "!" - Инверсия
Данный оператор является унарным и работает только с одним значением
Операция инвертирует (устанавливает обратное) значение
- Если значения true - false
- Если false - true
Пример:
boolean a = !false; // true boolean b = !true; // false
Приведу несколько примеров по теме:
boolean a = (10 + 2) < 6 || 2 == 2; // true boolean b = false ^ 2 < 1; // true boolean c = a & b; // true boolean d = 10 < 100 && -1 > 2; // false boolean e = !((a && b) || c); // true
Теперь вернемся к ветвлению
Напомню синтаксис конструкции if:
if (Условие) { //code }
В условие принимается значение/выражение типа boolean, если значение ровно true - блок кода внутри фигурных скобок выполнится, в другом случае - будет игнорироваться.
Пример:
Проверяем число на четность
Scanner in = new Scanner(System.in); System.out.println("Введите число, для проверки на четность"); int input = in.nextInt(); if (input % 2 == 0) { System.out.println("Число четное"); } if (!(input % 2 == 0)) { System.out.println("Число не четное"); }
- Для начала мы подключаем сканер.
- Выводим сообщение, где просим ввести число.
- Читаем вводное значение и записываем в переменную input.
- Условие: если вводное значение делим по модулю на 2 и получаем 0, выводим сообщение, что число четное. (иными словами если число делится на 2 без остатка)
- Условие: такое же условие только в начале стоит оператор НЕ (!), то есть если условие не верное выводим сообщение, что число не четное.
Конструкция else (иначе)
Используется вместе с конструкцией if позволяет выполнить блок кода, если условие if - false.
Синтаксис:
if (Условие) { // Выполняемый код, если условие верное } else { // Выполняемый код, если условие не верное }
В качестве примера можно переписать прошлый пример с использованием else (как и нужно было писать эту программу):
Scanner in = new Scanner(System.in); System.out.println("Введите число, для проверки на четность"); int input = in.nextInt(); if (input % 2 == 0) { System.out.println("Число четное"); } else { System.out.println("Число не четное"); }
А как бы вы решили такую задачу:
Вводится число, если оно четное выводим 1, если нет, выводим 2, если число четное и больше 3-х выводим 3.
Предполагаю, что некоторые будут пытаться написать примерно так:
Scanner in = new Scanner(System.in); System.out.println("Введите число, для проверки на четность"); int input = in.nextInt(); if (input % 2 == 0) { System.out.println("1"); } else { System.out.println("2"); } if (input % 2 == 0 && input > 10) { System.out.println("3"); }
Давайте разберем, что здесь не так
если мы вводим нечетное число - все хорошо, выведется 2
и если введем четное число, но меньше 10 - выведется 1,
а вот если вводим четное число больше 10 - выведется и 1, и 3
Почему так происходит? Ответ прост, потому что так написана программа. Например если вводится число 12 подойдет к первому условию и к третьему.
На самом деле логика должна быть примерно такая:
Проверяем число на четность
Если четное, то
проверяем больше ли оно 10-ти
Если больше - выводим 3
Если нет - выводим 1
Если не четное, то выводим 2
/////////////Блок - схема
А вот и сам код программы:
Scanner in = new Scanner(System.in); System.out.println("Введите число, для проверки на четность"); int input = in.nextInt(); if (input % 2 == 0) { if (input % 2 == 0 && input > 10) { System.out.println("3"); } System.out.println("1"); } else { System.out.println("2"); }
Конструкция else if
Предположим, что у вас в программе есть момент, когда идет множество ветвлений и вам приходится писать несколько условий подряд.
К примеру, обработчик какой-то команды (как в командной строке), пользователь вводит команду и программа как-то реагирует на это.
Для этого отлично подходит конструкция else if.
Синтаксис:
if (Условие 1) { // Code 1... } else if (Условие 2) { // Code 2... } else if (Условие 3) { // Code 3... } else { // Code 4... }
Как это будет работать:
- Если 1 условие верное - выполняется code 1
- Если 1 условие не верное, следует условие 2, если оно верное - выполняется code 2
- Если условие 2 не верное, следует условие 3, если оно верное - выполняется code 3
- Если условие 3 не верное -выполняется code 4
Разберем на примере программы, которая будет выводит расписание занятий для конкретной группы.
Идея такая: У нас есть факультет "Программирования", на ней учится 3 группы (для простоты с номерами 1, 2, 3) . Программа будет спрашивать группу, в ответ выдавать - расписание занятий на завтра.
Для начала давайте спросим у пользователя, для какой группы расписание ему нужно.
System.out.println("Введите номер группы");
Затем нужно считать данные, которые ввел пользователь.
Scanner in = new Scanner(System.in); int groupNumber = in.nextInt();
Далее нам нужно судя из ответа, вывести нужно расписание. Тут мы и будем использовать конструкцию else if.
if (groupNumber == 1) { System.out.println("Расписание для первой группы"); } else if (groupNumber == 2) { System.out.println("Расписание для второй группы"); } else if (groupNumber == 3) { System.out.println("Расписание для третей группы"); } else { System.out.println("Данной группы не существует"); }
Здесь вы можете посмотреть полный код программы
Конструкция Switch
В некоторых случаях из-за конструкции else if код может стать слишком громоздким и излишним, конструкция switch помогает решить эту проблему.
Работа switch аналогична.
Синтаксис:
switch (Принимаемое значение) { case 1: // Code 1.. break; case 2: // Code 2.. break; case 3: // Code 3.. break; default: // Code 4.. }
Здесь дела обстоят также как и в примере выше (про if else), но немного меняется принцип.
В "принимаемые значение" можно вставить переменную/значение, далее идут несколько case'ов, "принимаемое значение" сравнивается со всеми значениями написанные после оператора case, если они ровны - выполняется код после ":" до оператора break, если не один не подошел - выполняется код после оператора default (оператор default может отсутствовать).
В качестве примера предлагаю переписать пример выше (с использованием else if).
Пример:
// ПОправить скин (забыл sout)
//Резюме