<script>

 

   var output = '';

 

    for (var i = 0; i<10; i++) {

 

        for ( var j =0; j<i; j++) {

 

             output += '*';

        }

 

       output += ' ';

}

 

alert(output);

 

 


-----------------------------------

 

피라미드 만드는 아주 기초적인 코드입니다..


물론 이 코드 자체를 그대로 써서 출력하면 잘 실행 됩니다만..

 

제가 이해하려고 머릿속에서 실행해보면..  계속 문제가 생기네요..

 

 


이 중첩 for문에서, 최초 상위 for문의을 검사하여  0<10이 참 ->  하위 for문이 실행

i = 0, j = 0 으로 j < i 는 거짓이 되고 바깥으로 나와  줄바꿈을 한번 하게 됩니다.

상위 for문이 참이므로 i가 증가하여 i = 1이 되고, 1<10 은 다시 참이 되어 하위 for문을 실행합니다.

i = 1, j=0 으로 j는 거짓이 되는데..


< 이때 상위 for문으로 돌아가고  i 와 j 둘다 1씩 증가한다면 계속 *후 줄바꿈을 하며 루프가 됩니다 >
상위, 하위 for문 두개가 모두 '참'일경우 증가값은 어떤쪽이 우선순위를 가지는지 헷갈리네요..



제가 이해하려 시도한 내용들은 이러합니다.



(A)
1. 첫번째 for문 0<10 참 -> 두번째 for문 실행 ->
   두번째 for문 0<0 거짓 -> 바깥으로 나와서 줄바꿈->
   첫번째 for문 i가 증가하여 1

2. 첫번째 for문 1<10 참 -> 두번째 for문 실행 ->
   두번째 for문 0<1 참 -> *출력 후 1증가 ->
   두번째 for문 1<1 거짓 -> 바깥으로 나와서 줄바꿈->
   첫번째 for문 i가 증가하여 2

3. 첫번째 for문 2<10 참 -> 두번째 for문 실행 ->
   두번째 for문 1<2 참 -> *출력 후 j가 증가하여 2
   두번째 for문 2<2 거짓 -> 줄바꿈
   첫번재 for문 i가 증가하여 3

4. 첫번째 for문 3<10 참 -> 두번째 for문 실행 ->
   두번째 for문 2<3 참 -> *출력 후 j가 증가하여 3
   두번째 for문 3<3 거짓 -> 바깥으로 나와서 줄바꿈
  

*
*
*
*
*

i=10이 될때까지 줄바꿈하며 *출력






(B)
1. 첫번째 for문 0<10 참 -> 두번째 for문 실행 ->
   두번째 for문 0<0 거짓 -> 바깥으로 나와서 줄바꿈 후
   첫번째 포문으로 돌아간다 i가 증가하여 i = 1

2. 첫번째 for문 1<10 참 -> 두번째 for문 실행 ->
   두번째 for문 0<1 참 -> *출력 -> j가 증하가여 j = 1, i가 증가하여 = 2

3. 첫번째 for문 2<10 참 -> 두번째 for문 실행 ->
   두번째 for문 1<2 참 -> *출력 -> j가 증가하여 j = 2, i가 증가하여 i = 3

4. 첫번째 for문 3<10 참 -> 두번째 for문 실행 ->
   두번째 for문 2<3 참 -> *출력 -> j가 증가하여 j = 3, i가 증가하여 i = 4
***********
줄바꿈이 없이 *만 계속 출력하게 되는 무한루프
(C)
상위 for문이 거짓이 될때까지 i가 증가한다고 생각하였을때.

1. 첫번째 for문 0<10 참 -> 두번째 for문 실행 ->
   두번째 for문 0<0 거짓 -> 바깥으로 나와서 줄바꿈->
   i가 증가하여 i=1 -> 첫번째 for문 실행

2. 첫번째 for문 1<10참 -> 두번째 for문 실행 ->
   두번째 for문 0<1 참 -> *출력 -> i가 증가하여 i=2 ->
   첫번째 for문 실행

3. 첫번째 for문 2<10참 -> 두번째 for문 실행 ->
   두번째 for문 0<3 참 -> *출력 -> i가 증가하여 i=3 ->
   첫번째 for문 실행

..... 거짓이 될때까지 반복

********     *을 8번 출력함.

4. 첫번째 for문 10<10 거짓 -> 줄바꿈하고 끝남..


-----------------------------------------------------------


제가 헷갈리는건 이러합니다.

1) i=0 , i < 10 거짓 -> 하위 for문 검사, j<i 거짓 -> '' + ' '출력

-> 상위 for문이 참이므로 1증가.

2) i=1 , i < 10 거짓 -> 하위 for문 검사, j<i 참 -> '*' + ' '출력

-> 둘다 참이므로 1씩 증가하여 i=2, j=1


여기서가 문제인데요 다시 i=2, i < 10 은 거짓이 되고

하위 for문으로 넘어가 i=2, j=1로, j < i 는 참이되며 *을 출력

그럼 제가 이해하기론 둘다 참이므로 1씩 증가하므로 *을 하나 출력한 뒤

다음부터 두 for문 둘다 참이므로 다음줄은 i가 10까지

증가하기 전, i=9 일때 까지 *을 계속 출력한다음 줄바꿈을 하게 되는데요...

둘다 1씩 증가한다면 계속 두 for문 모두 계속 참이기 때문에

줄바꿈으로 빠져나가질 않고요...


아무리해봐도...






1. 상위 for문 i=0, 0<10은 참이므로 하위 for문 실행->

하위 for문 i=0, j=0으로 i<j는 거짓이므로 빠져나가 공백을 ''+' ' 출력

상위 for문 i=1 로 증가



2. 상위 for문 i=1, 1<10은 참이므로 하위 for문 실행->

하위 for문 i=1, j=0으로 i<j는 참이므로 '*'+' ' 출력

둘다 참이므로 상위 for문의 i=2, 하위 for문의 j=1으로 증가



3. 상위 for문 i=2, 2<10은 참이므로 하위 for문 실행->

하위 for문 i=2, j=1로 i<j는 참이므로 '*'+' ' 출력

둘다 참이므로 상위 for문의 i=3, 하위 for문의 j=2으로 증가



4. 상위 for문 i=3 3<10은 참이므로 하위 for문 실행->

하위 for문 i=3, j=2로 i<j는 참이므로 '*'+' ' 출력

둘다 참이므로 상위 for문의 i=4, 하위 for문의 j=3으로 증가



10<10 으로 거짓이 되어야만. 중괄호를 빠져나옴



---------------------------------------------------------------------

두번째 for문이 거짓일때는 증가 연산자인 j 가 0으로 리셋되는건가요..? 으윽 헷갈려라..

어떻게 i가 2일때 j가 0일수 있나요?... 명확하게 답변 부탁합니다 으으

제가 머리가 나빠서 그런지 너무 답답하네요... 큭.