<script>
var output = '';
for (var i = 0; i<10; i++) {
for ( var j =0; j<i; j++) {
output += '*';
}
output += ' ';
}
alert(output);
-----------------------------------
피라미드 만드는 아주 기초적인 코드입니다..
물론 이 코드 자체를 그대로 써서 출력하면 잘 실행 됩니다만..
제가 이해하려고 머릿속에서 실행해보면.. 계속 문제가 생기네요..
3. 첫번째 for문 2<10 참 -> 두번째 for문 실행 ->
4. 첫번째 for문 3<10 참 -> 두번째 for문 실행 ->
*
*
*
*
i=10이 될때까지 줄바꿈하며 *출력
줄바꿈이 없이 *만 계속 출력하게 되는 무한루프
1. 첫번째 for문 0<10 참 -> 두번째 for문 실행 ->
2. 첫번째 for문 1<10참 -> 두번째 for문 실행 ->
3. 첫번째 for문 2<10참 -> 두번째 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일수 있나요?... 명확하게 답변 부탁합니다 으으
제가 머리가 나빠서 그런지 너무 답답하네요... 큭.
ㅇㅇ
길어서.. 알지? ㅇㅇ
for문으로 하지말고 if하고 goto로 짜봐 그럼 구조를 확실하게 이해할수있음
근데 자바스크립트에 goto가 있던가
이런식으로 낮은 추상화 단계에서 생각하면 머리가 깨진다.
안쪽 루프를 'i개의 별을 찍는다'로 요약해서 생각하면 쉬움
분명 별것 아닌것같은데 왜이렇게 어렵죠.. 큭.. 젠장. 제가 존나 멍청이 같네요..
뭘 머리아프게 고민하냐?
디버그 돌려서 breakpoint 걸어서 하나하나 니가 직접 구조를 보면 되잖아