Источник: FreeCodeCamp
Перечисление (enumeration или enum для краткости) в Java — это специальный тип данных, который содержит набор предопределенных констант. Обычно enum используется при работе со значениями, которые не требуется изменять, например, дни недели, времена года, цвета и так далее.
В этой статье мы увидим, как создать enum и как присвоить его значение другим переменным. Мы также узнаем, как использовать enum в операторе switch или циклически перебирать его значения.
Как создать Enum в Java
Чтобы создать enum, мы используем ключевое слово enum. Это аналогично тому, как вы создаете класс, используя ключевое слово class. Вот пример:
enum Colors {
RED,
BLUE,
YELLOW,
GREEN
}
В этом коде мы создали enum под именем Colors. Вы можете заметить, что все значения enum здесь написаны в верхнем регистре — но это просто общее соглашение. Если значения написаны в нижнем регистре, ошибки не будет. Каждое значение в enum отделяется запятой.
Далее мы собираемся создать новую переменную и присвоить ей одно из значений нашего enum.
enum Colors {
RED,
BLUE,
YELLOW,
GREEN
}
public class Main {
public static void main(String[] args) {
Colors red = Colors.RED;
System.out.println(red);
// RED
}
}
Это похоже на инициализацию любой другой переменной. Тут в коде мы инициализировали переменную Colors и присвоили ей одно из значений enum, используя синтаксис dot: Colors red = Colors.RED;.
Обратите внимание, что мы можем создать наш enum внутри класса Main, и код все равно будет работать:
public class Main {
enum Colors {
RED,
BLUE,
YELLOW,
GREEN
}
public static void main(String[] args) {
Colors red = Colors.RED;
System.out.println(red);
}
}
Если мы хотим получить порядковый номер любого из значений, нам придется использовать метод ordinal(). Вот еще один пример:
enum Colors {
RED,
BLUE,
YELLOW,
GREEN
}
public class Main {
public static void main(String[] args) {
Colors red = Colors.RED;
System.out.println(red.ordinal());
// 0
}
}
red.ordinal() из приведенного выше кода возвращает 0.
Как использовать Enum в операторе Switch
Сейчас мы узнаем, как можно использовать enum в операторе switch:
public class Main {
enum Colors {
RED,
BLUE,
YELLOW,
GREEN
}
public static void main(String[] args) {
Colors myColor = Colors.YELLOW;
switch(myColor) {
case RED:
System.out.println("The color is red");
break;
case BLUE:
System.out.println("The color is blue");
break;
case YELLOW:
System.out.println("The color is yellow");
break;
case GREEN:
System.out.println("The color is green");
break;
}
}
}
Это очень простой пример того, как мы можем использовать enum в операторе switch. Мы можем вывести на консоль "The color is yellow", потому что это единственный случай, который соответствует условию оператора switch.
Как создать циклический перебор значений enum
Для enum в Java есть метод values(), который возвращает массив значений enum. Мы собираемся использовать цикл foreach для перебора и печати значений нашего enum. Сделать это можно вот так:
enum Colors {
RED,
BLUE,
YELLOW,
GREEN
}
public class Main {
public static void main(String[] args) {
for (Colors allColors : Colors.values()) {
System.out.println(allColors);
/*
RED
BLUE
YELLOW
GREEN
*/
}
}
}
Заключение
В этой статье мы узнали, что такое enum в Java, как его создать и как присвоить его значения другим переменным. Мы также увидели, как использовать тип enum с оператором switch, и как можно циклически перебирать значения enum. Удачного кодинга!
Цикл while в Java: синтаксис и варианты применения
Источник: Dev.to
Сегодня мы разберем концепцию и синтаксис цикла while в Java, а также рассмотрим, как использовать этот цикл для перебора массива.
Концепция цикла while
Цикл while — один из основных типов цикла в Java, поэтому его можно использовать в программе для нескольких целей. Как и цикл for, цикл while можно применять для выполнения операций на основе условия. В цикле while счетчик включается не всегда. Количество итераций цикла while зависит от того, как часто возвращается условие цикла true.
Инициализация в цикле while в большинстве случаев может быть необязательной, в отличие от цикла for. Иногда цикл while не всегда выполняется в цикле. Возьмем конкретный пример:
System.out.println("You Input a wrong number");
int i = input.nextInt();
while(i==1||i==2||i==3||i==4){
System.out.println("inside the while loop block");
}
//if the user chooses any number different from 1,2,3 and 4.
System.out.println("outside the while loop block")
Здесь код использует цикл while для проверки пользовательского ввода на основе некоторых условий, поэтому он повторяется только один раз.
Синтаксис цикла while
while(condition){
//Statements
}
Условие цикла while принимает аргумент, который возвращает логическое значение true или false. При появлении true код в цикле while выполняется, но при false цикл завершается.
Поток каждого цикла while
Цикл while имеет принятый поток: инициализация > условие > выполнение операторов (initialization > condition > statements execution).
Первый этап — это этап инициализации. Его можно выполнить, объявив переменную и также инициализировав ее.
Второй этап — этап условия, этот этап должен возвращать значение true или false. Если он возвращает true, оператор в цикле while выполняется, но если возвращается false, цикл завершается.
Использование цикла while в качестве счетчика
Как и цикл for, цикл while также можно использовать в качестве счетчика. В приведенной ниже программе используется цикл while для итерации от 2 до 20. Это нужно для вывода на печать четных чисел.
int j = 2;
while(j <=20){
System.out.println(j);
j+=2;
}
Как видите, в программе j инициализируется значением 2, условие проверяется, если j меньше или равно 20. Если оно возвращает true, оператор выполняется, но если оно возвращает false, цикл while завершается.
Цикл while можно использовать для перебора массива
int[] age = {20, 30, 40, 40, 90};
int i = 0;
while (i < age.length)
{
System.out.println(age[i]);
i++;
}
В этом коде у нас есть массив возраста, и цикл while используется для перебора массива и вывода каждого элемента в массиве. Для проверки общего количества элементов в массиве используется age.length, в приведенной выше программе i служит индексом.
Оператор break в цикле while
Оператор break также может использоваться в цикле while, как и цикл for:
int i = 1;
while (true)
{
System.out.println(i);
if (i == 20)
{
break;
}
i++;
}
В приведенной выше программе оператор break использовался, чтобы остановить программу от бесконечного выполнения. While(true) означает, что программа всегда будет возвращать true.
Цикл while можно использовать для проверки ввода пользователя
System.out.println("Select an option\n"+
"1.Add Users\n"+
"2.Delete Users");
int x = input.nextInt();
while(x==1||x==2){
//Do something
}
System.out.println("You Input a wrong number");
В приведенной выше программе цикл while используется для проверки ввода пользователя и для гарантии того, что пользователь выбирает либо 1, либо 2. Если пользователь выбирает другое число, то выполняется System.out.println("You Input a wrong number");.
Оператор условия с циклом while
int i = 0;
while(i<10){
i++;
if(i==5){
continue;
} System.out.println(i);
}
Оператор условия также можно использовать в цикле while, чтобы пропустить конкретную итерацию. В приведенной выше программе оператор if используется для проверки i==5, если он возвращает true, то эта конкретная итерация будет пропущена.
Проект цикла while
Давайте создадим игру-угадайку, используя цикл while.
import java.util.*;
public class Main
{
static Scanner input = new Scanner(System.in);
static boolean hasWon;
static int count;
static int guess;
public static void main (String[] args)
{
System.out.println("Welcome to guess world");
System.out.println("Do you want to start the game? ");
System.out.println("1.Yes\n" +
"2.No");
int option= input.nextInt();
int guessNumber = (int) Math.floor(Math.random() * 10 + 1);
if (!( option == 2 ))
{
System.out.println("Welcome, choose a guess between 1 and 10\n" +
"you have only ten trials");
while (count <= 10)
{
int userGuess = input.nextInt();
if (userGuess == guessNumber)
{
hasWon = true;
System.out.println("Congratulation, you guessed right at " + count + " count");
count++;
break;
}
else if (userGuess < guessNumber)
{
hasWon = false;
System.out.println("Oops, you guessed a lower number, try an higher one");
count++;
}
else if (userGuess > guessNumber)
{
System.out.println("Oops, you guessed an high number, try an lower one");
hasWon = false;
}
}
if (hasWon == false)
{
System.out.println("You trials exceeds 10");
}
}
}
}
В этой программе мы создаем игру в угадайку цифр, используя цикл while. У игрока есть только 10 попыток. Как только количество раз, когда он играл в игру, превышает 10, игра завершается. Если игрок угадал правильную цифру, сообщение с поздравлением отображается на консоли.
Заключение
Цикл while только кажется сложным, освоить его не так трудно. Кроме того, он является вторым наиболее часто используемым циклом в Java и может использоваться для разных целей.
Добрый день! Огромное спасибо за полезную статью! Единственное, мне кажется, что в примере с игрой в угадайку во втором операторе else if (для случая, когда пользователь ввел большее число) забыли про увеличение счетчика (count++).
Тут скорее не пропущен count++, а не в том месте установлен при выигрыше, особого смысла увеличивать счетчик нету, а вот если для большего случая да нужно увеличивать.
А ещё лучше, думаю, увеличивать счетчик не в условиях, а после всех условий, код понятнее будет, чем увеличение счетчика в условиях.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ