Developer/자바스크립트

자바스크립트의 반복문(for / while / do..while)

단님 2024. 5. 16. 22:59
728x90
for 문

 

형식 :

for ( 초기식 ; 조건식 ; 증감식 ){

반복실행블럭

}

for ( 처음 ; 끝 ; 규칙 )

반복(회전)수 결정 조건 : 1) 처음 2) 끝 3) 일정한규칙

 

끝을 비워두면 무한루프가 형성됨.

탈출 조건을 걸어야 함.

if (탈출 조건 ) break;

 

true 일때 반복.( 0이 아닌 수를 true )

false 일때 반복 끝. (0이 false)

 

반복 루트 : 초기식(처음) > 조건식(끝이니 아니니?) > 반복실행블럭(실행해볼게) >

증감식(끝이아니니, 끝까지 가보자) > 조건식(아직도 끝이 아니니?) > 반복실행블럭(또 실행해볼게) 

 

// 34 ~ -68
for (let i = 35; i > -68;){
    i--;
    console.log(i);            
}


// 241 ~ 169
for (let i = 242; ;){
    i--;             
    if (i <= 168) break;
    console.log(i);            
}

 

while 문

 

형식 :

초기식선언;

while(조건식){

실행블럭

}

 

while 안에 초기식이 없기 떄문에 따로 초기식을 선언 해야함.

조건식에 true 값을 넣어줘야 실행되기 때문에 0이 아닌값을 통해 무한루프 형성.

// 69 ~ -51
let i = 69;

while (i > -52) {
    console.log(i);
    i--;
}

// 256 ~ 117
let i = 257;

while (1) {
    i--;
    if (i <= 116) break;
    console.log(i);
}

 

 

do...while 문

형식:

초기식선언;

do{

실행블럭}while(조건식);

 

while 뒤에 세미클론 주의

while 과 같이 초기식이 따로 존재해야함.

do {
    console.log(i);
    i--;
} while (i > -25 );

// 111 ~ 83
let i = 111;

do {
    console.log(i);
    if (i <= 83) break;
    i--;
} while (1);

 

 

중첩루프 (두가지 이상의 반복문 루프)

 

중첩 루프의 특성 : 외곽구조변수 값이 고정되어 있는 상태에서

내곽 구조변수 값이 변하는 특징.

 

// 99단 출중첩 루프 구조 : 외곽구조 내곽구조

for (let i = 1; i <= 9; i++) {       //외곽구조
    for (let j = 1; j <= 9; j++) {   //내곽구조
        document.write(`i = ${i} x ${j} = ${i * j}`)   
    }
    document.write(`<br/>`);
}

결과값에 대해 한자리수와 두자리수의 차이로 인해 가지런하지 않은 모습을 볼 수 있다.

 

for (let i = 1, space = '', result; i <= 9; i++) {               // 외곽구조
    for (let j = 1; j <= 9; j++) {               // 내곽구조
        result = i * j + '';

        for (let r = 0; r < 2 - result.length; r++) {
            result = '&nbsp;' + result;
        }
        document.write(`${i} x ${j} = ${result} `);
        // space = '';
    }
    document.write('<br/>');
}

공백을 맞춰주기 위해 공백을 설정하자.

result의 값을 문자열로 형변환 시킨다음( result = i * j + ''; )

자기 자신의 자리수 길이를 알 수 있다.( result.length )

 

최대 자리수가 2자리임을 감안하고 편하게 계산해보면,

2-자기자신의 자리수 만큼 공백이 출력되야 함을 알 수 있다.

(실제로 확장성을 고려한다면 , 최대값을 구해서 최대값을 문자열로 바꾼다음

최대값의 문자열길이 - 자기자신의 문자열 길이를 한 만큼 공백이 출력되야 할것이다.)

result에 공백을 더하는 반복문을 돌려서 , 값을 저장할 수 있다.

result에 출력한다음 다시 내곽구조의 반복문을 돌게되는데 ,

그때 result의 값이 초기화 되고 있는 모습을 볼 수있다.( result = i * j + ''; )

 

결과를 확인해보자.

 

 

무한 루프의 탈출법.

 

1.조건문 break;

가장 가까운 루프를 탈출.

 

2.조건문 continue;

for 문 : 증감식 부분으로 점핑 증감식 > 조건식

while, do~while : 조건식 부분으로 점핑 조건식

 

1.레이블 탈출 :

탈출하고 싶은 구역 위에 레이블명 :

사용방식 :조건문 break 레이블명 ;

 

2.레이블 점핑 :

점핑하고 싶은 구역 위에 레이블 명 :

사용 방식 :조건문 continue 레이블명; 2<i<5

if(2<i && i<5) continue;