Switch case with if else in java

Ветвление в Java

Java-университет

Ветвление в Java - 1

В данной статье мы рассмотрим такое понятие как ветвление в компьютерных программах в общем и написанных на ЯП Java. Поговорим о таких управляющих конструкциях, как:

  • if-then (или же if )
  • if-then-else (или же if-else )
  • switch-case

Ветвление

if-then

Оператор if-then , или же просто if пожалуй самый распространенный оператор. Выражение “да там 1 if написать” уже стало крылатым. Оператор if имеет следующую конструкцию:

  • bool_condition — boolean выражение, результатом которого является true или false. Данное выражение называют условием.
  • statement — команда (может быть не одна), которую необходимо исполнить, в случае, если условие истинно ( bool_statement==true )
 public static void main(String[] args) < Scanner scanner = new Scanner(System.in); System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?"); int a = scanner.nextInt(); if (a < 10) < System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству"); >> 

В данной программе пользователю предлагается ввести количество процентов заряда батареи на его смартфоне. В случае, если осталось менее 10 процентов заряда, программа предупредит пользователя о необходимости зарядить смартфон. Это пример простейшей конструкции if . Стоит заметить, что если переменная `а` будет больше либо равна 10, то ничего не произойдет. Программа продолжит выполнять код, который следует за конструкцией if . Также заметим, что в данном случае, у конструкции if есть только одна последовательность действий для исполнения: напечатать текст, либо не делать ничего. Эта вариация ветвления с одной “ветвью”. Такое порой бывает необходимо. Например когда мы хотим обезопасить себя от неправильных значений. К примеру, мы не можем узнать количество букв в строке, если строка равна null . Примеры ниже:

 public static void main(String[] args) < String x = null; printStringSize(x); printStringSize("Не представляю своей жизни без ветвлений. "); printStringSize(null); printStringSize("Ифы это так захватывающе!"); >static void printStringSize(String string) < if (string != null) < System.out.println("Кол-во символов в строке `" + string + "` lang-java line-numbers"> if (bool_condition) < statement1 >else
  • bool_statement — boolean выражение, результатом которого является true или false. Данное выражение называют условием.
  • statement1 — команда (может быть не одна), которую необходимо выполнить, если условие истинно ( bool_statement==true )
  • statement2 — команда (может быть не одна), которую необходимо выполнить, если условие ложно ( bool_statement==false )
 Если (bool_condition), то Иначе
 public static void main(String[] args) < Scanner scanner = new Scanner(System.in); System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?"); int a = scanner.nextInt(); if (a < 10) < System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству"); >else < System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush"); >> 

Тот же пример об уровне заряда батареи на смартфоне. Только если в прошлый раз программа только лишь предупреждала о необходимости зарядить смартфон, то в этот раз у нас появляется дополнительное уведомление. Разберем этот if :

Если a < 10 истинно (уровень заряда батареи меньше 10), программа выведет на печать один текст. Иначе, если условие a < 10 не выполняется, то программа выведет уже совсем другой текст. Доработаем также и второй наш пример, в котором мы выводили на экран количество букв в строке. В прошлый раз программа не выводила ничего, если переданная строка была равна null . Исправим этом, превратив обычный if в if-else :

 public static void main(String[] args) < String x = null; printStringSize(x); printStringSize("Не представляю своей жизни без ветвлений. "); printStringSize(null); printStringSize("Ифы это так захватывающе!"); >static void printStringSize(String string) < if (string != null) < System.out.println("Кол-во символов в строке `" + string + "`=" + string.length()); >else < System.out.println("Ошибка! Переданная строка равна null!"); >> 

В методе printStringSize в конструкцию if мы добавили блок else . Теперь, если мы запустим программу, она выведет в консоль уже не 2 строки, а 4, хотя вводные (метод main ) остались такими же, как и в прошлый раз. Текст, который выведет программа:

 Ошибка! Переданная строка равна null! Кол-во символов в строке `Не представляю своей жизни без ветвлений. `=43 Ошибка! Переданная строка равна null! Кол-во символов в строке `Ифы это так захватывающе!`=25 

Допустимы ситуации, когда после else следуют не команды на исполнение, а еще один if . Тогда конструкция принимает следующий вид:

 If (bool_condition1) < statement1 >else if (bool_condition2) < statement2 >else if (bool_conditionN) < statementN >else
  • bool_condition1
  • bool_condition2
  • bool_conditionN
  • statement1
  • statement2
  • statementN
 Если (bool_condition1) то Иначе если (bool_condition2) то Иначе если (bool_conditionN) то Иначе

Последняя строка в данном случае опциональна. Можно обойтись и без последнего одинокого else . И тогда конструкция примет следующий вид:

 If (bool_condition1) < statement1 >else if (bool_condition2) < statement2 >else if (bool_conditionN)
 Если (bool_condition1) то Иначе если (bool_condition2) то Иначе если (bool_conditionN) то

Соответственно, в случае, если ни одно из условий не окажется истинным, то ни одна команда не будет исполнена. Перейдем к примерам. Вернемся к ситуации с уровнем заряда на смартфоне. Напишем программу, которая будет более детально информировать владельца об уровне заряда его девайса:

 public static void main(String[] args) < String alert5 = "Я скоро отключусь, но помни меня бодрым"; String alert10 = "Я так скучаю по напряжению в моих жилах"; String alert20 = "Пора вспоминать, где лежит зарядка"; String alert30 = "Псс, пришло время экономить"; String alert50 = "Хм, больше половины израсходовали"; String alert75 = "Всё в порядке, заряда больше половины"; String alert100 = "Я готов к приключениям, если что.."; String illegalValue = "Такс, кто-то ввел некорректное значение"; Scanner scanner = new Scanner(System.in); System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?"); int a = scanner.nextInt(); if (a 100) < System.out.println(illegalValue); >else if (a < 5) < System.out.println(alert5); >else if (a < 10) < System.out.println(alert10); >else if (a < 20) < System.out.println(alert20); >else if (a < 30) < System.out.println(alert30); >else if (a < 50) < System.out.println(alert50); >else if (a < 75) < System.out.println(alert75); >else if (a > 

К примеру в данном случае, если пользователь введет 15, то программа выведет на экран: “Пора вспоминать, где лежит зарядка”. Несмотря на то, что 15 меньше и 30 и 50 и 75 и 100, вывод на экран будет только 1. Напишем еще одно приложение, которое будет печатать в консоль, какой сегодня день недели:

 public static void main(String[] args) < // Определим текущий день недели DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); if (dayOfWeek == DayOfWeek.SUNDAY) < System.out.println("Сегодня воскресенье"); >else if (dayOfWeek == DayOfWeek.MONDAY) < System.out.println("Сегодня понедельник"); >else if (dayOfWeek == DayOfWeek.TUESDAY) < System.out.println("Сегодня вторник"); >else if (dayOfWeek == DayOfWeek.WEDNESDAY) < System.out.println("Сегодня среда"); >else if (dayOfWeek == DayOfWeek.THURSDAY) < System.out.println("Сегодня четверг"); >else if (dayOfWeek == DayOfWeek.FRIDAY) < System.out.println("Сегодня пятница"); >else if (dayOfWeek == DayOfWeek.SATURDAY) < System.out.println("Сегодня суббота"); >> 

Удобно конечно, но в глазах немного рябит от обилия однообразного текста. В ситуациях, когда у нас имеются большое количество вариантов лучше использовать оператор, речь о котором пойдет ниже.

Читайте также:  Inserting image as background html

switch-case

Альтернативой жирным if с большим количеством ветвей служит оператор switch-case . Данный оператор как бы говорит “Так, у нас есть вот такая вот переменная. Смотрите, в случае, если её значение равно `x`, то делаем то-то и то-то, если ее значение равно `y`, то делаем по-другому, а если ничему не равно из вышеперечисленного, просто делаем вот так… ” Данный оператор обладает следующей структурой.

  • byte and Byte
  • short and Short
  • int and Integer
  • char and Character
  • enum
  • String

Стоит обратить внимание: между `case valueX:` и `case valueY:` нет оператора break . Здесь, если argument будет равен value1 , выполнится statement1 . А если argument будет равен valueX либо valueY , выполнится statementXY . Разбавим тяжелую для восприятия теорию на легкую для восприятия практику. Перепишем пример с днями недели с использованием оператора switch-case .

 public static void main(String[] args) < // Определим текущий день недели DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); switch (dayOfWeek) < case SUNDAY: System.out.println("Сегодня воскресенье"); break; case MONDAY: System.out.println("Сегодня понедельник"); break; case TUESDAY: System.out.println("Сегодня вторник"); break; case WEDNESDAY: System.out.println("Сегодня среда"); break; case THURSDAY: System.out.println("Сегодня четверг"); break; case FRIDAY: System.out.println("Сегодня пятница"); break; case SATURDAY: System.out.println("Сегодня суббота"); break; >> 

Теперь напишем программу, которая выводит информацию о том, является ли сегодняшний день будним днем или выходным, используя оператор switch-case .

 public static void main(String[] args) < // Определим текущий день недели DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); switch (dayOfWeek) < case SUNDAY: case SATURDAY: System.out.println("Сегодня выходной"); break; case FRIDAY: System.out.println("Завтра выходной"); break; default: System.out.println("Сегодня рабочий день"); break; >> 

Немного поясним. В данной программе мы получаем enum DayOfWeek , который обозначает текущий день недели. Далее мы смотрим, равняется ли значение нашей переменной dayOfWeek значениям SUNDAY либо SATURDAY . В случае, если это так, программа выводит “Сегодня выходной”. Если же нет, то мы проверяем, равняется ли значение переменной dayOfWeek значению FRIDAY . В случае, если это так, программа выводит “Завтра выходной”. Если же и в этом случае нет, то вариантов у нас немного, любой оставшийся день является будним днем, поэтому по умолчанию, если сегодня НЕ пятница, НЕ суббота и НЕ воскресение программа выведет “Сегодня рабочий день”.

Читайте также:  Php insert duplicate entry

Заключение

Источник

Условные операторы в Java: if-else, switch и «Элвис»

Обложка: Условные операторы в Java: if-else, switch и «Элвис»

Чтобы эффективно работать с условными операторами на языке Java, необходимо знать, какими они бывают и для каких сценариев подходят. Обсудим это и некоторые нововведения из Java 13.

Условный оператор if

Оператор if позволяет задать условие, в соответствии с которым дальнейшая часть программы может быть выполнена. Это основной оператор выбора, который используется в языке Java. Он начинается с ключевого слова if и продолжается булевым выражением — условием, заключённым в круглые скобки.

В качестве примера рассмотрим простое равенство, при истинности которого программа выведет результат:

Поскольку условие истинно, в выводе программы мы увидим:

Условный оператор if-else в Java

else в языке Java означает «в ином случае». То есть если условие if не является истинным, выводится то, что в блоке else :

Это же сработает и без ключевого слова else , но чтобы код был читабельным и логичным, не следует пренебрегать else , как это сделано в следующем примере:

if(2 * 2 == 5) < System.out.println("Программа выполняется"); >System.out.println("Условие ошибочно");

А теперь давайте создадим несколько условий с использованием конструкции if-else . Выглядит это таким образом:

int a = 20; if(a == 10) < System.out.println("a = 10"); >else if(a == 15) < System.out.println("a = 15"); >else if(a == 20) < System.out.println("a = 20"); >else

Как видим, только третье условие истинно, поэтому выводится именно a = 20 , а все остальные блоки игнорируются.

Вложенный if

Кроме того, может производиться проверка сразу на несколько условий, в соответствии с которыми выполняются разные действия. Представим, что у нас есть две переменные, на основе которых можно создать два условия:

int a = 20; int b = 5; if(a == 20) < System.out.println("a = 20"); if(b == 5)< System.out.println("b = 5"); >>

В результате программа заходит в оба блока и делает два вывода, потому как оба условия истинны.

Читайте также:  Css font parse error

«Элвис»

По сути, это сокращенный вариант if-else . Элвисом его прозвали за конструкцию, которая напоминает причёску короля рок-н-ролла — ?: . Данный оператор также принято называть тернарным. Он требует три операнда и позволяет писать меньше кода для простых условий.

Само выражение будет выглядеть следующим образом:

int a = 20; int b = 5; String answer = (a > b) ? "Условие верно" : "Условие ошибочно"; System.out.println(answer);

Как видите, с помощью тернарного оператора можно существенно сократить код. Но не стоит им злоупотреблять: для сложных условий используйте другие операторы выбора Java, дабы не ухудшать читаемость кода.

Условный оператор switch в Java

Оператор выбора switch позволяет сравнивать переменную как с одним, так и с несколькими значениями. Общая форма написания выглядит следующим образом:

Рассмотрим распространённый пример с днями недели:

public class Main < //Создадим простое перечисление дней недели private static enum DayOTheWeek< MON, TUE, WED, THU, FRI, SAT, SUN >public static void main(String[] args) < //Выбираем понедельник (MON) var dayOfTheWeek= DayOTheWeek.MON; switch (dayOfTheWeek)< case MON: System.out.println("Понедельник"); break; case TUE: System.out.println("Вторник"); break; default: System.out.println("Другой день недели"); >> >

break при этом прерывает процесс проверки, поскольку соответствие условия уже найдено. Но начиная с Java 13, вместо break в условном операторе switch правильнее использовать yield — ключевое слово, которое не только завершает проверку, но и возвращает значение блока.

Кроме того, с 12 версии Java конструкция switch-case также претерпела некоторые изменения. Если вы используете в работе IntelliJ IDEA, данная среда разработки сама подскажет, как оптимизировать switch-case под новые версии.

Вот преобразованный код из нашего примера с некоторыми изменениями:

public class Main < private static enum DayOTheWeek< MON, TUE, WED, THU, FRI, SAT, SUN >public static void main(String[] args) < //В этот раз выберем вторник var dayOfTheWeek= DayOTheWeek.TUE; String result = switch (dayOfTheWeek)< case MON ->"Понедельник"; case TUE, WED, THU, FRI -> < yield "Любой будний день, кроме понедельника."; >default -> "Выходной день"; >; System.out.println(result); > >
Любой будний день, кроме понедельника.

Задачи на условные операторы Java

Определите, что выведут в консоль следующие примеры, без проверки в компиляторе.

1. В переменной min лежит число от 0 до 59. Определите в какую четверть часа попадает это число (в первую, вторую, третью или четвертую):

int min = 10; if(min >= 0 && min else if(min >= 15 && min else if(min >= 31 && min else

7 практических заданий с собеседования на позицию Junior Java Developer

2. Что выведет следующий код:

int month = 3; String monthString; switch (month) < case 1: monthString = "Январь"; break; case 2: monthString = "Февраль"; break; case 3: monthString = "Март"; break; case 4: monthString = "Апрель"; break; case 5: monthString = "Май"; break; case 6: monthString = "Июнь"; break; case 7: monthString = "Июль"; break; case 8: monthString = "Август"; break; case 9: monthString = "Сентябрь"; break; case 10: monthString = "Октябрь"; break; case 11: monthString = "Ноябрь"; break; case 12: monthString = "Декабрь"; break; default: monthString = "Не знаем такого"; break; >System.out.println(monthString);

3. Какое значение будет присвоено переменной k :

Пишите свои ответы к задачам по условным операторам в Java.

Источник

Оцените статью