Switch true false java

Java Switch Statement

Java switch statements help in providing multiple possible execution paths for a program. Java switch statements can be used in place of if-else statements to write more cleaner and concise code.

Java switch statements have evolved over time. In this tutorial, we will learn about basic switch statement features and new features in later versions of Java.

The general form of a switch statement is –

The expression value must be one of the following 6 types:

  • Primitive data types e.g. byte , short , char , and int
  • Wrapper classes e.g. Character , Byte , Short , and Integer
  • Enum types (added in Java 5)
  • String class (added in Java 7)

Here labelOne, labelTwo and labelThree are “compile-time constant expressions” or constants (the value of the labels must be known at compile-time).

We can achieve similar functionality with a chain of if-else blocks, but the switch statement is more readable and clean.

A switch statement is evaluated as follows:

  1. First of all, the switch expression is evaluated.
  2. The datatype of the expression value and case labels must be same.
  3. Second, the value of expression is matched against the value of each case label. If the value of the expression matches a case label, the execution starts from the matched case label and executes all statements until the break statement is encountered.
  4. If the value of the expression does not match any case label, execution starts at the statement following the optional default label and continues until the end of the switch statement or the break statement is encountered.

We can easily guess that the use of a break statement inside the default label is not necessary because the default label is the last label in the switch statement and the execution of the switch statement will stop after that anyway.

In this example, we are checking if today is a weekend or weekday, using the switch statement. For storing all the days in a week, we have created an enum.

Notice how we have created a total of eight case labels that return an appropriate true or false value.

public class SwitchStatement < public static void main(String[] args) < System.out.println("Monday is : " + isWeekDay(Day.TUE)); System.out.println("Monday is : " + isWeekDay(Day.SUN)); >public static Boolean isWeekDay(Day day) < Boolean result = false; switch(day) < case MON: result = true; break; case TUE: result = true; break; case WED: result = true; break; case THUR: result = true; break; case FRI: result = true; break; case SAT: result = false; break; case SUN: result = false; break; default: throw new IllegalArgumentException("Invalid day: " + day.name()) >return result; > > enum Day

The above example works as expected, but we can make it better. As we see that multiple case labels are returning the same value, so we can group the case labels to make the code more readable.

public static Boolean isWeekDay(Day day) < Boolean result = false; switch(day) < case MON, TUE, WED, THUR, FRI: result = true; break; case SAT, SUN: result = false; break; default: throw new IllegalArgumentException("Invalid day: " + day.name()) >return result; >

There is still a chance of improvement. In the above example, having the break statements does not look good. We can remove the break statements using the new arrow syntax. It is available since Java 13.

public static Boolean isWeekDay(Day day) < Boolean result = false; switch(day) < case MON, TUE, WED, THUR, FRI ->result = true; case SAT, SUN -> result = false; default -> throw new IllegalArgumentException("Invalid day: " + day.name()); > return result; >

Java 12 introduced the switch expressions which can compute the value for the whole switch statement and assign its value to a variable. It is very similar to other normal Java statements.

Читайте также:  Body height auto html

2.1. Return value with Arrow Syntax

Let us rewrite the last example, with a switch expression. Notice line no. 11 where we are directly assigning the value of the switch statement to the variable result.

public class SwitchStatement < public static void main(String[] args) < System.out.println("Monday is : " + isWeekDay(Day.TUE)); System.out.println("Monday is : " + isWeekDay(Day.SUN)); >public static Boolean isWeekDay(Day day) < Boolean result = switch(day) < case MON, TUE, WED, THUR, FRI ->true; case SAT, SUN -> false; default -> throw new IllegalArgumentException("Invalid day: " + day.name()); >; return result; > > enum Day

2.2. Return Value with yield Keyword

In the above example, we are writing only the return value in the case statements. What if we have to execute multiple statements before returning any value from a given case block.

In such cases, yield keyword helps in returning a computed value from a multi-statement block.

In the given example, we have written only a print statement. You can write as many statements as needed.

public static Boolean isWeekDay(Day day) < Boolean result = switch(day) < case MON, TUE, WED, THUR, FRI -> < System.out.println("It's Weekday"); yield true; >case SAT, SUN -> < System.out.println("It's Weekend"); yield false; >default -> throw new IllegalArgumentException("Invalid day: " + day.name()); >; return result; >

3.1. Better instanceof checking with Switch Statements

Traditionally, if we had to write a code that checks the instance type and perform some logic, it was the way:

Object o; if (o instanceof String) < String s = (String) o; String.format("String %s", s) >else if (o instanceof Integer) < Integer i = (Integer) o; String.format("int %d", i) >else if (o instanceof Double)

In Java 17, we can rewrite the whole expression in the following manner;

Object o; switch (o) < case Integer i ->String.format("int %d", i); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); >

Traditional switch statements throw NullPointerException if the selector expression evaluates to null .

From Java 17, we can check for null values as the separate case itself.

if (s == null) < System.out.println("oops!"); return; >switch (s) < case "Foo", "Bar" ->System.out.println("Great"); default -> System.out.println("Ok"); >
switch (s) < case null ->System.out.println("Oops"); case "Foo", "Bar" -> System.out.println("Great"); default -> System.out.println("Ok"); >

4.1. Case Label Values Must be in Range of DataType

Please note that the value of the constant expressions used as the case labels must be in the range of the data type of switch expression.

The range of the byte data type in Java is -128 to 127, so the following code would not compile because the second case label is 150, which is outside the range of the byte data type:

4.2. Duplicate Case Labels are Not Allowed

Another important point to note is that two case labels in a switch statement cannot be the same. The following piece of code would not compile because case label 10 is repeated:

Источник

Ветвление в 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 :

Читайте также:  Gren exe su navi 20os 20software html

Если 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("Сегодня суббота"); >> 

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

Читайте также:  Как найти процент python

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 . В случае, если это так, программа выводит “Завтра выходной”. Если же и в этом случае нет, то вариантов у нас немного, любой оставшийся день является будним днем, поэтому по умолчанию, если сегодня НЕ пятница, НЕ суббота и НЕ воскресение программа выведет “Сегодня рабочий день”.

Заключение

Источник

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