Для того, чтобы изменить последовательность выполнения фрагментов программы, в языке Java применяются конструкции if, if-else и switch.
В этом лабораторной работе мы рассмотрим:
- Как применяются условные операторыif, if-else и switch.
- Какие существуют логические операторы в Java .
- Какие возможны сокращения в конструкции if-else.
В конце работы упражнения для закрепления материала.
Конструкцияif-elseимеет следующий вид:
if (логическое_выражение) { //блок кода 1}else{ //блок кода 1}Блок else не является обязательным.
Логическое выражениеэто выражение (или переменная), возвращающее значение типа boolean.
Пример:
boolean b = true; if (b) { System.out.println("b - истина");}Логические операторы в Java.
В логическом выражении могут использоваться следующие логические операторы: ==, !=,<=,>=,>,<, &&,||,! .
Рассмотрим на примере:
int a = 4;int b = 5;boolean result;result = a == b // a равно b - false result = a != b // a не равно b - trueresult = a < b; // a меньше b - trueresult = a > b; // a больше b - falseresult = a <= 4 // a меньше или равно 4 - trueresult = b >= 6 // b больше или равно 6 - falseresult = a > b || a < b // (a больше b) логическое или (a меньше b) - trueresult = 3 < a && a < 6 // (3 меньше a) логическое и(a меньше 6) - trueresult = !result // логическое нет - falseОтличие == и equals
Оператор == работает иначе на объектных типах данных, нежели на примитивных. Когда мы используем объекты и хотим проверить их равенство, то оператор == укажет нам лишь на то, являются ли объекты одними и теми же или нет. Если же необходимо проверить логическое равенство объектов, то следует использовать метод equals. Пример:
String str1 = new String("Привет");String str2 = new String("Привет");String sameStr = str1; boolean b1 = str1 == str2; // b1 - false, потому что str1 и str2 это 2 разных объектаboolean b2 = str1.equals(str2); // b2 - true, потому что str1 и str2 логически эквивалентныboolean b3 = str1 == sameStr; // b3 -true, потому что str1 и sameStr в действительности один и тот же объект
Условный оператор if
Ели логическое выражение в скобках правдиво, то выполняется , блок кода в фигурных скобках {} после if. Если логическое выражение принимает значение false, то ничего не происходит.
if (a == b) { //Если a равно b - выводим сообщение System.out.println("a и b равны!");}Условный оператор if-else
Конструкция if-else отличается от предыдущей тем, что если логическое выражение в круглых скобках принимает значение false, то выполняется блок кода, находящийся в фигурных скобках после ключевого слова else
if (a == b) { //Если a равно b - выводим сообщение System.out.println("a и b равны!");}else{ //Если a не равно b - выводим сообщение System.out.println("a и b не равны!");}Возможные сокращения if-else
1. Если блоки кода if, else содержат лишь одну строку, то можно обойтись без использования фигурных скобок. Предыдущий пример можем записать так:
2. Существует еще одинспособ сокращения оператора if-else при помощи оператора ? : . Запишем предыдущий пример следующим образом:
System.out.println(a==b ? "a и b равны!" : "a и b не равны!");Общая форма записи условия выглядит следующим образом:
Логическое_выражение ? Выражение1 : Выражение2Если Логическое_выражение принимает значение true, то выполняется Выражение1, а иначе — Выражение2. Внимание: при использовании этой конструкции два последних выражения должны иметь один и тот же тип.
Условный оператор switch — case
Условный оператор switch — case удобен в тех случаях, когда количество вариантов очень много и писать для каждого if-else очень долго. Конструкция имеет следующий вид :
switch (выражение) { case значение1: //блок кода 1; break; case значение2: //блок кода 2; break; ... case значениеN: //блок кода N; break; default: блок N+1; }switch работает с такими примитивными типами данных как: byte, short, char, и int. Также с типами Enum, классом String и несколькими специальными классами-оболочками примитивных типов: Character, Byte, Short, Integer.
Выражение в круглых скобках после switch сравнивается со значениями, указанными после слова case, и, в случае совпадения, управление передается соответствующему блоку кода. Если выражение не совпадает ни с одним вариантом case, то управление передается блоку default, который не является обязательным. После выполнения соответствующего блока, оператор break вызывает завершение выполнения оператора switch. Если break отсутствует, то управление передается следующему блоку за только что выполненным.
В следующем примере, для целочисленного значения, представляющего день недели, определяется его название в виде строки. Для значения 3, переменная dayString примет значение «Среда».
int day = 3; String dayString; switch (day) { case 1: dayString = "Понедельник"; break; case 2: dayString = "Вторник"; break; case 3: dayString = "Среда"; break; case 4: dayString = "Четверг"; break; case 5: dayString = "Пятница"; break; case 6: dayString = "Суббота"; break; case 7: dayString = "Воскресенье"; break; default: dayString = "Ошибка"; break; } System.out.print(dayString);Упражнения на тему Условные операторы в Java:
- Даны 4 числа типа int. Сравнить их и вывести наименьшее на консоль.
- Вывести на консоль количество максимальных чисел среди этих четырех.
- Даны 5 чисел (тип int). Вывести вначале наименьшее, а затем наибольшее из данных чисел.
- Даны имена 2х человек (тип String). Если имена равны, то вывести сообщение о том, что люди являются тезками.
- Дано число месяца (тип int). Необходимо определить время года (зима, весна, лето, осень) и вывести на консоль.
Лабораторная работа 9. Java операторы цикла (for, while, do-while), оператор break
Цикл в программировании используется для многократного повторения определенного фрагмента кода. В Java существует 3 оператора цикла: for, while, do-while.
В этом лабораторной работе мы рассмотрим:
· Как применяются операторы цикла for, while, do-while.
· Досрочный выход из цикла
Рассмотрим подробнее использование операторов цикла в Java.
При использовании конструкции for заранее известно, сколько раз необходимо осуществить повторение. При использовании конструкций while или do-while повторения будут происходить до тех пор, пока выполняется некоторое условие (логическое выражение)
Цикл for в Java.
Рассмотрим пример:вывод на экран числа от 1 до 10.
for (int i = 1; i <= 10; i++) { System.out.print(i + " ");}Конструкция for имеет следующий вид:
for (инициализация; условие; итерация) { //тело цикла}Инициализация — первый параметр, который содержит переменную и ее начальное значение. С помощью этой переменной будет подсчитываться количество повторений цикла. В нашем примере это переменная int i = 1.
Условие — второй параметр, содержит некоторое логическое выражение — условие при котором будет выполняться цикл. В нашем примере это условие i <= 10.
Итерация — третий параметр, выражение, изменяющее переменную (заданную в инициализации) после каждого шага цикла. Изменение происходит только в случае выполнения условия. В нашем примере итерация i++ — увеличение переменной на единицу. Также для итерации часто используется i— — уменьшение переменной на единицу.
Пример: Вывод на экран чисел от 10 до −10:
for (int i = 10; i > -11; i--) { System.out.print(i + " ");}Цикл while в Java.
Пример: Вывод на экран значений от 1 до 10.
int i = 1;while(i < 11){ System.out.println("i= " + i); i++;}Конструкцияwhile имеет следующий вид:
while(логическое_выражение) { //тело цикла}Конструкция while выполняет выражение в фигурных скобках до тех пор, пока параметр логическое_выражение имеет истинное значение (true). Этот параметр является условием выполнения цикла. В выше приведенном примере, логическое выражение имеет вид i < 11.
Истинность логического выражения (условия) проверяетсяперед каждым шагом цикла, в том числе и перед первым. while так же называют оператором предусловия.
Приведем пример цикла, который не выполнится ни разу:
int i =10;while(i < 5){ System.out.println("i= " + i); i++;}Для реализации бесконечного цикла, в качестве параметра достаточно указать true
while(true) { //тело цикла}Цикл do-while в Java.
В отличие от оператора while, do-while является оператором постусловия, который сначала выполняет тело цикла, а потом осуществляет проверку условия. Таким образом, тело цикла выполнится всегда хотя бы один раз.
Пример: Вывод на экран значений от 1 до 10.
int i = 1;do{ System.out.println("i = " + i); i++;}while(i < 11);Конструкция do — while имеет следующий вид:
do { //тело цикла}while(логическое_выражение);Как видно из конструкции, тело цикла выполняется перед проверкой условия. Впоследствии, тело цикла повторится в случае, если логическое_выражение было истинно. Оператор do-while удобно применять, если некоторые действия необходимо выполнить, по крайней мере, один раз, а их повторение будет зависеть от условия.
Вспомним пример цикла while, который не выполнится ни разу, и перепишем его с помощью оператора do-while
int i =10;do{ System.out.println("i= " + i); i++;}while(i < 5);После выполнения цикла, на экран будет выведено значение i= 10.