Java

SCJP 40번 문제 do while 과 while의 차이점

bang2001 2013. 7. 25. 15:44

QUESTION 40

Given:
10. int x = 0;
11. int y = 10;
12. do {
13. y--;
14. ++x;
15. } while (x < 5);
16. System.out.print(x + "," + y);


What is the result?
A. 5,6
B. 5,5
C. 6,5
D. 6,6


Answer: B


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


먼저 이 문제에서는 위의 코드에 대한 결과로 옳은것을 선택하는 문제입니다.

 

현재 위 코드를 보시면 반복문이 보이는데요, 이 반복문은 저희가 자바시간에 배운 반복문과는 차이가 있다는것을 알 수 있습니다.
저희가 그동안 사용했던 반복문과는 다른 형태를 띄고 있는데요, 위 코드에 쓰인 반복문은
C언어에서 사용하는 반복문 작성기법중 하나로, while문과 for문 do~while문이 있는데 그중 제일 마지막인 do~while문 입니다.

먼저 이 반복문이 생소하신 분도 있을테니 위의 반복문이 어떤식으로 작동을 하는지 알아보겠습니다.

 

do
{
 문장
}
while (조건식);

 

의 형태로 먼저 문장을 먼저 수행하고 난 뒤에 조건식을 수행하여 해당 조건식이 참인지 거짓인지 판단을 한 이후
참이면 다시 문장을 반복수행하게 되고, 거짓일 경우에는 문장을 재 수행하지 않고, 인터프린터 방식에 의해서
아래에 위치한 코드를 수행하게 됩니다. 다음 그림?을 참고하겠습니다.

 

                      |
                      |
                    문장 ◀-----+
                      |             | (참)
                      |             |
                      |             |
                      |             |
                    조건식------+
                      |
                      |
                      | (거짓)
                      |
                      ▼

 

이와같은 순서로 반복문을 실행하게 됩니다. while과 do~while문의 차이라고 한다면 조건식을 먼저 수행하느냐, 먼저 수행하지 않느냐의 차이입니다.

따라서 이 반복문을 생행하는 순서대로 결과를 유추하면 다음과 같습니다.

 

 1번째 반복문 실행 : x = 1 , y = 9
 조건문 : 참

 

 2번째 반복문 실행 : x = 2 , y = 8
 조건문 : 참

 

 3번째 반복문 실행 : x = 3 , y = 7
 조건문 : 참

 

 4번째 반복문 실행 : x = 4 , y = 6
 조건문 : 참

 

 5번째 반복문 실행 : x = 5 , y = 5
 조건문 : 거짓, 더이상 반복문을 수행하지 않는다.

 

 출력문을 만나서 x값과 y값을 출력한다.

 

따라서 실제 결과값은 "5,5" 가 됩니다. 때문에 답은 B가 됩니다.