JavaRush /Java Blog /Random-KO /Java에서 분기

Java에서 분기

Random-KO 그룹에 게시되었습니다
이 기사에서는 일반적인 컴퓨터 프로그램의 분기 개념과 Java로 작성된 분기 개념을 살펴보겠습니다. 다음과 같은 제어 구조에 대해 이야기해 보겠습니다.
  • if-then(또는 if)
  • if-then-else(또는 if-else)
  • switch-case
Java에서 분기 - 1

분기

기본 개념부터 시작하겠습니다. 모든 프로그램은 컴퓨터가 실행하는 명령 집합입니다. 대부분의 경우 명령은 순차적으로 하나씩 실행됩니다. 프로그램 명령의 순차적 흐름을 변경해야 할 때 약간 덜 자주(그러나 여전히 꽤 자주) 상황이 발생합니다. 때로는 특정 조건에 따라 다른 명령 블록 대신 한 명령 블록을 실행해야 할 수도 있습니다. 그리고 이러한 조건이 바뀌면 그 반대를 수행하십시오. 예를 들어, 18세 미만의 청소년이 방문할 수 없는 사이트가 많이 있습니다. 일반적으로 이러한 리소스를 처음 방문하면 사용자에게 연령 제한에 대해 경고하고 생년월일을 입력하라는 메시지가 표시되는 형식이 표시됩니다. 그런 다음 사용자가 입력한 데이터에 따라 리소스에 입력할 수 있는지 여부가 결정됩니다. 이 기능은 일반적으로 분기라고 불리는 기능을 통해 제공됩니다. 또 다른 비유를 해보자. 일곱 개의 도로가 교차하는 지점에 우리 자신이 있다고 상상해 봅시다. 우리는 좌회전, 우회전, 아니면 직진 중 하나를 선택해야 합니다. 우리의 선택은 특정 조건에 따라 이루어집니다. 우리는 동시에 여러 도로를 이용할 기회도 없습니다. 저것들. 어떤 조건에 따라 우리는 하나의 길을 선택해야 할 것입니다. 분기에도 동일한 원칙이 적용됩니다. 이제 분기에 대한 정의를 내려 보겠습니다. 분기는 특정 조건의 진실성에 따라 여러 작업 시퀀스 중 하나가 수행되는 알고리즘 구성입니다. 분기는 거의 모든 프로그래밍 언어에서 구현됩니다. Java 프로그래밍 언어에는 프로그램에서 분기를 구현할 수 있는 여러 가지 소위 제어 구성이 있습니다. 프로그래밍 언어에는 다음과 같은 세 가지 구성이 있습니다.
  • 운영자if-then
  • 운영자if-then-else
  • 삼항 연산자? :
if-else이번 글에서는 and 연산자를 살펴보겠습니다 switch-case.

그렇다면

Operator if-then또는 아마도 if가장 일반적인 연산자일 것입니다. “예, 1이면 1을 쓰세요”라는 표현은 이미 대중화되었습니다. 연산자의 if구조는 다음과 같습니다.
if (bool_condition) {
	statement
}
이 디자인에서는:
  • bool_condition참 또는 거짓으로 평가되는 부울 표현식입니다. 이 표현을 조건이라고 합니다.
  • statement— 조건이 참인 경우 실행해야 하는 명령(2개 이상이 있을 수 있음)( bool_statement==true)
이 구성은 다음과 같이 읽을 수 있습니다.

Если (bool_condition), то {statement}
여기 몇 가지 예가 있어요.
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. 변수 'a'가 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 + "`=" + string.length());
    }
}
기본 메소드를 실행하면 콘솔에 다음이 출력됩니다.

Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
이를 확인한 덕분에 string != null프로그램 오류를 피할 수 있었습니다. string그리고 변수가 와 같은 경우에는 아무 것도 하지 않습니다 null.

그렇다면 그렇지 않으면

일반적인 경우에 if프로그램에 "무언가를 하거나 아무것도 하지 않음"이라는 선택권이 있다면, if-else프로그램을 선택할 때 "한 가지 일을 하거나 다른 일을 하는 것"으로 귀결됩니다. "아무 것도 하지 않음" 옵션이 사라집니다. 이러한 유형의 분기에는 두 가지 이상의 실행 변형(또는 분기 수)이 있습니다. 두 가지 옵션이 있는 경우를 고려해 보겠습니다. 그러면 제어 구조는 다음과 같은 형식을 갖습니다.
if (bool_condition) {
	statement1
} else {
	statement2
}
여기:
  • bool_statement참 또는 거짓으로 평가되는 부울 표현식입니다. 이 표현을 조건이라고 합니다.
  • statement1— 조건이 참인 경우 실행해야 하는 명령(2개 이상이 있을 수 있음)( bool_statement==true)
  • statement2— 조건이 거짓인 경우 실행해야 하는 명령(2개 이상 있을 수 있음 bool_statement==false)
이 구성은 다음과 같이 읽을 수 있습니다.

Если (bool_condition), то {statement1}
Иначе {statement2}
예는 다음과 같습니다.
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:
if (a < 10) {
    System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
    System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
a < 10true(배터리 잔량이 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 {
	statementN+1
}
이 디자인에는 몇 가지 조건이 있습니다.
  • bool_condition1
  • bool_condition2
  • bool_conditionN
그러한 조건의 수는 제한되지 않습니다. 각 조건에는 고유한 명령이 있습니다.
  • 성명1
  • 성명서 2
  • 성명N
각각에는 statement1줄 이상의 코드가 포함될 수 있습니다. 조건은 하나씩 확인됩니다. 첫 번째 참 조건이 결정되면 참 조건에 "연결된" 일련의 명령이 실행됩니다. 이러한 명령을 실행한 후 프로그램은 if앞으로 더 많은 검사가 있었더라도 블록을 종료합니다. 위에 정의된 조건 중 어느 것도 true가 아닌 경우 "statementN+1" 표현식이 실행됩니다. 이 구성은 다음과 같이 읽을 수 있습니다.

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
이 경우 마지막 줄은 선택 사항입니다. 마지막 외로운 사람 없이도 할 수 있습니다 else. 그러면 디자인은 다음과 같은 형태를 취하게 됩니다.
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
}
그러면 다음과 같이 읽혀질 것입니다:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
따라서 조건 중 어느 것도 참이 아니면 단일 명령이 실행되지 않습니다. 예제로 넘어 갑시다. 스마트 폰의 충전 수준 상황으로 돌아가 보겠습니다. 소유자에게 장치의 충전 수준에 대해 더 자세히 알려주는 프로그램을 작성해 보겠습니다.
public static void main(String[] args) {
    String alert5 = "Я скоро отключусь, но помни меня бодрым";
    String alert10 = "Я так скучаю по напряжению в моих жилах";
    String alert20 = "Пора вспоминать, где лежит зарядка";
    String alert30 = "Псс, пришло время экономить";
    String alert50 = "Хм, больше половины израсходовали";
    String alert75 = "Всё в порядке, заряда больше половины";
    String alert100 = "Я готов к приключениям, если что..";
    String illegalValue = "Такс, кто-то ввел некорректное meaning";

    Scanner scanner = new Scanner(System.in);
    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a <= 0 || 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 <= 100) {
        System.out.println(alert100);
    }
}
예를 들어, 이 경우 사용자가 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("Сегодня суббота");
    }
}
물론 편리하지만, 단조로운 텍스트가 너무 많아서 눈이 좀 현혹됩니다. 옵션이 많은 상황에서는 아래에서 설명할 연산자를 사용하는 것이 더 좋습니다.

스위치 케이스

if많은 분기가 있는 굵은 글씨의 대안은 연산자입니다 switch-case. 이 연산자는 “그래서 우리는 이 변수를 가지고 있습니다. 보세요, 그 값이 'x'와 같으면 이렇게 하고, 그 값이 'y'와 같으면 다르게 하고, 위의 어느 것과도 같지 않으면 그냥 이렇게 합니다. it like this... ” 이 연산자는 다음과 같은 구조를 가지고 있습니다.
switch (argument) {
	case value1:
		statement1;
		break;
	case value2:
		statement2;
		break;
	case valueN:
		statementN;
		break;
	default:
		default_statement;
		break;
}
이 구조를 좀 더 자세히 살펴보겠습니다. argument 가상의 다른 옵션과 비교할 값을 갖는 변수입니다. 변수는 이어야 합니다 final. switch연산자가 인수로 어떤 데이터 유형도 지원하지 않는다는 점도 주목할 만합니다 . 유효한 유형은 다음과 같습니다.
  • 바이트와 ​​바이트
  • 짧고 짧다
  • 정수와 정수
  • 문자와 문자
  • 열거형
case value1 (value2, valueN)- 이것은 변수의 값을 비교하는 특정 상수인 값입니다 argument. 또한 각 사례는 실행해야 하는 명령 집합을 정의합니다. statement1, statement2, 는 다음 중 하나와 동일한 것으로 판명될 statementN경우 실행해야 하는 명령입니다 . 예를 들어 와 같으면 프로그램 이 실행됩니다 . "기본값"입니다 . 제시된 것과 동일하지 않으면 분기 가 트리거되고 명령이 실행됩니다 . 및 연산자의 선택적 속성입니다 . — 각 사례 블록 끝에는 진술이 있다는 것을 알 수 있습니다 . 이 연산자도 선택 사항이며 다양한 경우의 코드를 구별하는 데 사용됩니다. 때로는 서로 다른 경우에 동일한 작업을 수행해야 할 때도 있습니다. 그런 다음 이러한 경우를 결합할 수 있습니다. 이 경우 키워드는 생략되며 연산자의 구조는 다음과 같습니다. argumentvalueargumentvalue2statement2defaultdefault_statementargumentvaluedefaultdefault_statementdefaultdefault_statementswitch-casebreakbreakbreakswitch-case
switch (argument) {
	case value1:
		statement1;
		break;
	case valueX:
	case valueY:
		statementXY;
		break;
}
`case valueX:`와 `case valueY:` 사이에 연산자가 없다는 점은 주목할 가치가 있습니다 break. 여기서 argument와 같으면 value1실행됩니다 statement1. 그리고 인수가 , 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의 값과 같은지 확인합니다 . 이 경우 프로그램은 “오늘은 쉬는 날입니다”라고 표시합니다. 그렇지 않다면 변수의 값이 의 값 과 같은지 확인합니다 . 이 경우 프로그램은 “내일은 쉬는 날입니다.”라고 표시합니다. 이 경우 아니요가 없으면 옵션이 거의 없으며 남은 날은 평일이므로 기본적으로 오늘이 금요일이 아니고 토요일이 아니고 일요일이 아닌 경우 프로그램은 "오늘은 근무일입니다."라고 표시합니다. SUNDAYSATURDAYdayOfWeekFRIDAY

결론

그래서 이 기사에서 우리는 컴퓨터 프로그램에서 분기가 무엇인지 살펴보았습니다. 또한 Java에서 분기를 구현하는 데 어떤 제어 구조가 사용되는지 알아냈습니다. 우리는 다음과 같은 디자인에 대해 논의했습니다.
  • if-then
  • if-then-else
  • switch-case
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION