Today I Learned

while문 무한 루프 수정

솔솔이소리솔 2023. 10. 12. 16:36

예제) while문을 활용해서, 3초과 100미만의 숫자 중 5의 배수인 것만 출력하기.

let i = 0;
while (3 < i < 100) {
    if (i % 5 === 0 && i >= 5) {
        console.log(i)
    }
    i++;
}

이렇게 저장하고 코드를 실행했더니, 값이 무한대로 멈추지 않고 계속해서 찍혀나왔다.

이 코드에서의 문제: 


1. while루프의 조건 부분이 올바르게 작동하지 않는다. 3 < i < 100은 원하는 조건을 만족시키지 않는다.
2. i의 초기값이 0으로 설정되어 있어서 조건을 충족하지 않아 루프가 실행되지 않는다.


문제 1.

JavaScript에서 while 루프는 지정된 조건이 true일 때 실행된다. 여기서 사용한 조건 3 < i < 100이 의도한대로 작동하지 않는 이유는 이 조건이 실제로는 다음과 같이 해석되기 때문인데,

1. 3 < i가 true인 경우
2. i < 100이 true인 경우

즉, i가 어떤 값이더라도 항상 3 < i와 i < 100이 동시에 true이므로 루프가 무한대로 실행되는 것이다. 따라서 루프에서 빠져나오지 못하고 무한 반복되는 문제가 발생하게 된다.

 

문제 2.

i의 초기값이 0으로 설정되어 있고, while루프의 조건은 i > 3를 포함하고 있다.  초기값이 while 루프의 조건에 부합하지 않으면 루프가 실행되지 않고 바로 종료된다.

 

while 루프의 동작은 다음과 같이 이루어진다.


1. 루프의 조건을 평가 ->  조건이 false이면 루프를 실행하지 않고 종료.
2. 조건이 true인 경우, 루프 내부의 코드 블록 실행.
3. 코드 블록이 실행을 마치면, 다시 조건을 평가하고  조건이 true인 경우 루프를 계속 반복, 조건이 false인 경우 루프 종료(조건이 false가 될 때까지 반복).

 

코드 수정

1. i의 초기값을 4로 변경한다.

2. && 연산자를 사용하여 두 조건이 모두 충족되게 한다.

let i = 4;
while (i > 3 && i < 100) {
    if (i % 5 === 0 && i >= 5) {
        console.log(i);
    }
    i++;
}