OCJP (1Z0-851 / 2012-08-28 / Exam A) - 32 번
관련 이론 및 문법
(레이블 (Label) 참고)
http://kkikkodev.tistory.com/104
문제 의도
go() 메소드가 호출되었을 때 결과를 보기에서 고르는 문제입니다.
답안
C
풀이 방법
go() 메소드가 호출되면, 먼저, String 형 o 라는 변수가 선언됨과 동시에 "" 로 초기화됩니다. 그 다음에, z 라는 레이블로 바깥 for 문을 영역지정합니다.
바깥 for 문은 x 라는 변수를 0 으로 초기화하고, 0 < 3 이 참이기 때문에, 안으로 들어갑니다. 안쪽 for 문에서 y 라는 변수를 0 으로 초기화하고, 0 < 2 가 참이기 때문에, 안으로 들어갑니다. (현재, x 는 0, y 는 0) 먼저 첫 번째 if 문에서 x == 1 조건문이 거짓이기 때문에 넘어가고, 두번째 if 문에서 x == 2 && y == 1 또한 거짓이기 때문에 넘어가고, o = o + x + y 문장을 실행하여, o 는 "00" 이 됩니다. 그 다음에, 안쪽 for 문의 y++ 을 실행하여 y 를 1 로 만들고, 1 < 2 도 역시 참이기 때문에, 다시 안쪽 for 문으로 들어갑니다. 첫 번째 if 문 역시 거짓이므로 넘어가고, 두 번째 if 문 역시 거짓이므로, 넘어갑니다. o = o + x + y 문장을 실행하여, o 는 "0001" 이 됩니다. 그 다음, 안쪽 for 문의 y++ 을 실행하여 y 를 2 로 만들고, 2 < 2 가 거짓이기 때문에 안쪽 for 문을 빠져 나옵니다.
그 다음, 바깥쪽 for 문의 x++ 을 실행하여 x 를 1 로 만들고 다시 안쪽 for 문에 가서, y 라는 변수를 0 으로 초기화합니다. (현재, x 는 1, y = 0) 0 < 2 가 참이기 때문에, 안쪽 for 문으로 들어가게 되고, 첫 번째 if 문의 조건인 x == 1 이 참이 되어 break; 를 실행하여, 안쪽 for 문을 빠져 나옵니다.
다시, 바깥쪽 for 문의 x++ 을 실행하여 x 를 2 로 만듭니다. 그 다음에, 안쪽 for 문에서 y 변수를 0 으로 초기화하고 (현재 x = 2, y = 0), 0 < 2 가 참이기 때문에 안쪽 for 문으로 들어갑니다. 첫 번째 if 문의 조건은 거짓이므로 건너뛰고, 두 번째 if 문도 거짓이므로 건너뜁니다. o = o + x + y 문장을 실행하여, o 는 "000120" 이 됩니다. 안쪽 for 문의 y++ 을 실행하여 y 를 1 로 만듭니다. 1 < 2 가 참이기 때문에 안쪽 for 문으로 들어가고, 첫 번째 if 문은 거짓이라 건너뜁니다. 두 번째 if 문의 조건이 참이 되므로, break z; 를 실행하여, z 레이블을 빠져 나옵니다. (바깥쪽 for 문 영역)
그래서, 바깥쪽 영역 다음 라인의 System.out.println(o) 문을 실행하고, "000120" 을 화면에 출력하게 됩니다. 따라서, 답안은 C 가 됩니다.