JavaRush /Java Blog /Random-KO /Java의 While 루프

Java의 While 루프

Random-KO 그룹에 게시되었습니다

소개

우리의 첫 번째 프로그램은 차례로 실행되는 일련의 명령이었습니다. 포크가 없습니다. 인사말과 연산 결과를 콘솔에 출력하는 HelloWorld 입니다. 첫 번째 프로그램 이후에 우리는 분기하는 방법, 즉 프로그램이 조건에 따라 특정 작업을 수행하는 방법을 배웠습니다. 난방 및 냉방을 위해 에어컨을 켜도록 코딩하는 방법은 다음과 같습니다.
if (tempRoom>tempComfort)
    airConditionerOn();
if (tempRoom<tempComfort
    heaterOn();
다음 단계를 밟아보자. 일상 생활에서 우리는 파이를 만들기 위해 사과 껍질을 벗기는 등 단조롭고 반복적인 행동을 자주 수행합니다. 이 매혹적인 과정은 다음과 같이 설명될 수 있습니다.
  1. 세면대에 사과가 있으면 1.1~1.4단계를 따르세요.

    1. 1.1. 사과를 드세요
    2. 1.2. 깨끗이 씻어 큼직하게 썰어주세요
    3. 1.3. 프라이팬에 페이스트리 파이 바닥을 깔아주세요.
    4. 1.4. 1단계로 돌아가 보겠습니다.
연산자 동안 - 2
사과 10개, 손 2개, 칼 1개가 있다고 가정해 보겠습니다. 인생에서 당신은 동일한 알고리즘에 따라 10개 전체를 일관되게 청소합니다. 프로그램이 각 사과에 대해 반복 작업을 수행하도록 하려면 어떻게 해야 합니까?
  • 사과의 수에 우리 자신을 묶어두자. 하지만 그 수가 적다면 명령 중 일부는 "페이로드" 없이 헛되이 실행될 것이다(그리고 아마도 존재하지 않는 사과를 껍질을 벗기다가 자해를 하게 될 수도 있다).
  • 처리 팀보다 사과 수가 더 많으면 일부 제품이 처리되지 않을 수 있습니다.
  • 이러한 "코드"는 읽기 어렵고 반복이 많으며 수정하기 어렵습니다.

루프는 작업을 여러 번 수행하는 연산자입니다.

Java while 루프(악한 루프)는 우리의 경우에 잘 작동합니다. 이 디자인은 여러 작업을 간결하고 이해하기 쉬운 구조로 구성합니다. Java에서 사과를 잘라서 파이로 만드는 알고리즘은 다음과 같습니다.
while(числоЯблокВТазике>0) {
    яблоко = тазик.взятьОчередноеЯблоко();
    положитьВПирог(яблоко.чистить().нарезать());
    числоЯблокВТазике--;//-- this is a decrement, reduces the number of apples by one
}
System.out.println('Apples for the pie are processed.');

명령 구문

while 문을 설명하는 첫 번째 방법은 다음과 같습니다.
while(Логическое выражение) {
	// Loop body - periodically executed statement(s)
}
이 작업은 다음과 같이 수행됩니다(단계별).
  1. 괄호 안의 while 뒤에 나오는 부울 조건을 평가합니다.
  2. 논리 조건이 true이면 루프 본문의 문이 실행되고, 루프 본문의 마지막 문을 실행한 후 1단계로 이동합니다.
  3. 논리 조건이 거짓이면 while 루프 외부의 첫 번째 문으로 이동합니다.

전제조건이 있는 루프

루프 본문을 실행하기 전에 항상 논리식(루프에 들어가기 위한 조건)을 미리 계산하므로 이러한 유형의 while을 종종 전제 조건이 있는 루프라고 합니다. 숫자의 양의 거듭제곱인 처음 10개의 정수로 구성된 테이블을 만들어 보겠습니다.
public static void main(String[] args) {
    int number = 3; // Number to be raised to a power
    int result = 1; // Result of exponentiation
    int power = 1; // Initial exponent
    while(power <= 10) { // loop entry condition
        result = result * number;
        System.out.println(number + "to the extent" + power + " = " + result);
        power++;
    }
}
콘솔 출력 결과:
3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
3 в степени 9 = 19683
3 в степени 10 = 59049
Process finished with exit code 0

사후 조건이 있는 루프

두 번째 유형의 주기:
do {
    // Loop body - periodically executed statement(s)
}while (Логическое выражение);
다음과 같이 수행됩니다(단계):
  1. 루프의 본문이 실행됩니다(do 키워드 바로 뒤).
  2. 괄호 안의 while 뒤에 나오는 부울 조건을 평가합니다.
  3. 논리조건이 참이면 1단계로 이동
  4. 논리 조건이 거짓이면 while 루프 외부의 첫 번째 문으로 이동합니다.
이전 유형의 루프와 두 가지 주요 차이점은 루프 본문이 한 번 이상 실행되고 루프 본문이 실행된 후 논리 조건이 확인된다는 것입니다. 따라서 이러한 유형의 while 루프를 사후조건 루프라고 합니다. 이번에는 10000을 초과하지 않는 숫자의 거듭제곱 표를 표시하겠습니다.
public static void main(String[] args) {
    int number = 3;// Number to be raised to a power
    int result = number;// Result of exponentiation
    int power = 1;// Initial exponent
    do {
        System.out.println(number + "to the extent" + power + " = " + result);
        power++;
        result = result * number;
    }while (result < 10000); // loop exit condition
콘솔 출력 결과:
3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
Process finished with exit code 0
코드의 변경 사항에 주의를 기울이고 이를 전제 조건이 있는 루프 버전과 비교하세요.

루프 작업에 대한 흥미로운 사실

루프 본문의 제어 명령

루프의 진행에 영향을 미치는 두 가지 명령이 있습니다. 다음 장에서 그 기능을 보여줄 break와 계속하다.
  • continue – 현재 루프 본문의 실행을 중지하고 while 연산자의 논리식으로 이동합니다. 계산된 표현식이 true이면 루프 실행이 계속됩니다.
  • break - 현재 루프의 실행을 즉시 중지하고 루프 외부의 첫 번째 명령으로 점프합니다. 따라서 현재 루프의 실행이 중단됩니다. 다음 주제에서 더 자세히 살펴보겠습니다.
과일의 예를 기억해 봅시다. 제공되는 사과의 품질이 확실하지 않은 경우 다음 명령을 사용하여 코드를 변경할 수 있습니다 continue.
while(числоЯблокВТазике>0) {
    яблоко = тазик.взятьОчередноеЯблоко();
    числоЯблокВТазике--;//-- this is a decrement, reduces the number of apples by one
    if (яблоко.плохое()) {  // method will return true for rotten, etc. apples
        яблоко.выкинутьВМусор();
        continue; // continue the loop, go to the condition number ofApplesIn the Basin>0
    }
    положитьВПирог(яблоко.чистить().нарезать());
}
이 구성은 continue루프 본문에서 특정 조건이 발생할 때 명령을 실행해야 할 때 자주 사용됩니다. 예를 들어 장비의 센서가 트리거될 때 작업을 수행하거나(그렇지 않으면 해당 표시기를 읽는 주기를 계속합니다) 주기의 특정 단계에서만 표현식을 계산합니다. 마지막 경우의 예는 제곱이 숫자보다 작은 자연수 세제곱의 합을 while 루프에서 계산하는 것입니다.
public static void main(String[] args) {
    int sum = 0;    // total amount
    int i = 0;      // starting number of the row
    int count = 20; // amount of numbers
    while(i<=count) {
        i++;        // take the next number, i++ is equivalent to i=i+1
        if (i*i<=count)  // if the square of the number is less
            continue;   // number of numbers - do not count the sum
                        // move on to the next number in the loop
        sum += i*i*i; // otherwise, we calculate the sum of cubes of numbers
    } // sum += i*i*i - notation similar to sum = sum + i*i*i
    System.out.println(sum);// print result
}

끝없는 순환

이러한 제어 명령은 무한 루프에서 가장 자주 사용됩니다. 논리적 종료 조건이 절대 충족되지 않기 때문에 이렇게 부릅니다. 코드에서는 다음과 같습니다.
while(true) {
    // Loop body
}
break이 경우 명령을 사용하여 종료를 구성하는 것이 유용합니다 . 이러한 유형의 루프는 루프 본문의 논리 외부에 형성된 외부 조건을 기다릴 때 발생합니다. 예를 들어, 영웅 주변의 가상 세계를 에뮬레이트하는 게임(루프 종료 = 게임 종료), 운영 체제. 또는 알고리즘을 사용할 때 루프의 각 후속 호출로 결과를 향상시킬 수 있지만 시간이나 외부 이벤트(체커, 체스 또는 일기 예보)의 발생으로 제한할 수 있습니다. 정상적인 조건에서 무한 루프는 프로그램 불안정의 문제 중 하나라는 점을 기억해야 합니다. 설명을 위해 숫자의 거듭제곱으로 돌아가 보겠습니다.
public static void main(String[] args) {
    int number = 3; // Number to be raised to a power
    int result = 1; // Result of exponentiation
    int power = 1; // Initial exponent
    while(true) {
        result = result * number;
        System.out.println(number + "to the extent" + power + " = " + result);
        power++;
        if (power>10)
            break; // exit from the loop
    }
}
콘솔 출력 결과:
3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
3 в степени 9 = 19683
3 в степени 10 = 59049
Process finished with exit code 0

중첩 루프

여기서 우리는 주기에 관한 마지막 주제에 도달합니다. 사과 파이(현재 배고프지 않기를 바랍니다)와 "루프"에 대해 생각해 봅시다.
  1. 세면대에 사과가 있으면 1.1~1.4단계를 따르세요.

    1. 1.1. 사과를 드세요
    2. 1.2. 깨끗이 씻어 큼직하게 썰어주세요
    3. 1.3. 프라이팬에 페이스트리 파이 바닥을 깔아주세요.
    4. 1.4. 1단계로 돌아가 보겠습니다.
조각으로 자르는 과정을 더 자세히 설명하겠습니다.
  1. 슬라이스 수 = 0
  2. 슬라이스 수가 12개 미만인 동안 2.1~2.3단계를 따르세요.

    1. 2.1. 사과 한 조각 더 자르기
    2. 2.2. 슬라이스 수 ++
    3. 2.3. 2단계로 돌아가기
그리고 이를 제과 알고리즘에 삽입합니다.
  1. 세면대에 사과가 있으면 1.1~1.6단계를 따르세요.

    1. 1.1. 사과를 드세요
    2. 1.2. 껍질을 벗겨
    3. 1.3. 슬라이스 수 = 0
    4. 1.4. Пока число долек < 12, выполнить шаги с 1.4.1 по 1.4.3
      1. 1.4.1. Отрезать очередную дольку от яблока
      2. 1.4.2. Кол-во долек ++
      3. 1.4.3. Возвращаемся на шаг 1.4
    5. 1.5. Помещаем дольки на тестовое основание пирога из теста на сковороде
    6. 1.6. Возвращаемся на шаг 1.
Получor цикл в цикле. Подобные конструкции весьма частые. Для завершающего примера построим таблицу умножения, которые школьники 90-х видели на обложках тетрадей в младших классах.
연산자 동안 - 3
public static void main(String[] args) {
    // Display the values ​​of the second multiplier in the line
    System.out.println("    2  3  4  5  6  7  8  9");
    int i = 2;      // first multiplier, assign starting value
    while(i<10) {   // First loop, execute while the first multiplier is less than 10
        System.out.print(i + " | ");// Display the first multiplier at the beginning of the string
        int j = 2;                  // second multiplier, starting value
        while (j<10) { // Second loop, execute while the second multiplier is less than 10
            int mul=i*j; // Calculate the product of factors
            if (mul<10)  // If it contains one digit, print two spaces after it
                System.out.print(mul + "  ");
            else   // otherwise output the product and after it - one space
                System.out.print(mul + " ");
            j++;     // Increase the second multiplier by one,
        }            // Go to the beginning of the second loop (while (j<10 ).... )
        System.out.println(); // Move to the next line of output
        i++;                  // Increase the first multiplier by one,
    }                         // Go to the beginning of the first loop (while ( i<10 ) ....
}
Результат вывода на консоль:
2  3  4  5  6  7  8  9
2 | 4 6 8 10 12 14 16 18
3 | 6 9 12 15 18 21 24 27
4 | 8 12 16 20 24 28 32 36
5 | 10 15 20 25 30 35 40 45
6 | 12 18 24 30 36 42 48 54
7 | 14 21 28 35 42 49 56 63
8 | 16 24 32 40 48 56 64 72
9 | 18 27 36 45 54 63 72 81
Process finished with exit code 0
Циклы (в частности, оператор while) – один из фундаментальных кирпичиков построения программ. Решая задачи на JavaRush, вы изучите все их разнообразие, разберёте тонкости функционирования и получите практические навыки их применения.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION