문제를 통해서 바로 알아볼게요!!
문제: 1,2,3을 반복해서 10번씩 출력하는 프로그램을 작성하시오!
출력결과:
1
2
3
1
2
3
...
내코드
public class Main { public static void main(String[] args) { int i = 1; int j = 1; //<===1번위치 while(i<=10){ int j = 1; //<===2번위치 while (j<=3){ System.out.println(j); j++; } i++; } } }여기서 과연 1번위치와2번위치의 차이점은 무엇일까?? 문제에서 원하는 출력결과를 위해서는 어디에 넣어야할까? 한번 생각해보세요!
정답은??(맨밑에 공개하겠습니다!)
#1번위치에 넣는다면 어떻게 될까?
1. 첫 번째 while 문을 들어가게 될 거예요.
- 그리고 바로 두 번째 while 문을 들어가서 j 인자에 1이 들어가 있으니 조건식인 3보다 작기 때문에 1을 출력하고 j++;때문에 j는 2가 되겠죠? 그러면 조건식인 3보다 또 작기 때문에 두 번째 while 문을 나가지 못하고 2를 출력하고 증가하기를 반복해서 j가 4가 될 때 빠져나가겠죠?
- i++;로 i는 2가 되기 때문에 두 번째 while 문을 들어가려고 할 거예요
- 엥..?근데 두 번째 while 문에는 j가 없네요...?<=이 말의 의미는
쉬운 예를 들자면 A 뷔페는 뷔페가 있는 건물 밖에서 티켓을 사 와야 해요. 그리고 A 뷔페를 나가게 되면 그 티켓을 살려면 다시 건물 밖으로 나가야 해요!
반면에 B 가게는 뷔페가 있는 건물 안에서 티켓을 살 수 있기 때문에 뷔페를 나가도 건물 안에 있다면 다시 들어와서 사서 음식을 담으면 돼요!A 뷔페가 1번 위치, B 뷔페가 2번 위치라고 생각해 주시면 될 것 같아요!
즉 내가 j라는 뷔페 티켓을 1번 위치(뷔페 건 물 밖)에서 사서 뷔페 건물(첫 번째 while 문)을 들어왔어요! 그러면 뷔페(두 번째 while 문)에서 음식을 다 먹고 나가면 어떻게 되나요? 티켓을 다 써버렸기 때문에 다시 들어오려면 뷔페 건 물 밖(첫 번째 while 문)으로 나가야겠죠?
반면에 j라는 뷔페 티켓을 2번 위치(뷔페 건물 안)에 있으면 뷔페를 먹고 뷔페가 있는 건물 밖으로만 나가지 않는다면 다시 사서 들어갈 수 있어요!
따라서 위의 while 문에서도 j가 첫 번째 위치에 있게 되면 i는 증가해서 뷔페(두 번째 while 문)에 들어가고는 싶지만 티켓이 없어서 나와야 해요! 그러면 프로그램을 종료하기 때문에 1번 위치에 있으면 출력 결과가 1,2,3밖에 나오지 않는 거예요! 이해되셨나요? 따라서 원하는 출력 결과를 내기 위해서는 2번 위치가 정답입니다!!