while, do 문

By | 2009년 3월 9일

반복문의 또 다른 형태인 while 문과 do 문에 대해서 살펴보자. 먼저 이 두 경우 모두 주어진 조건이 만족하는 경우 특정 구간을 반복 수행한다. 그러나 while 문의 경우 주어진 조건을 먼저 검사한 후 그 결과에 따라 반복구간의 실행 여부를 결정하는 반면, do 문의 경우 반복구간을 먼저 실행한 후 조건식을 검사하여 반복구간을 또 실행 할 것인지 말것인지를 결정한다.

먼저 while 문을 살펴보자. while문의 형식은 다음과 같으며 while 옆 괄호 안에 조건식이 주어진다.

while 구조

형식


while ( 조건식 ) {
    실행코드
}


사용자 삽입 이미지

while - flowchart


while 문은 조건식과 함께 반복구간 앞에 위치해 앞서 언급한 것처럼 조건식을 먼저 검사한 후 반복구간의 수행 여부를 결정한다.

다음 프로그램 “while.jsp”는 1에서 100까지 자연수의 합을 구하는 프로그램으로 앞서 for 문으로 구현한 “for.jsp” 프로그램을 while 문을 이용 수정한 것이다.



<%@ page language=”java” contentType=”text/html; charset=EUC-KR”
    pageEncoding=”EUC-KR”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
<%
int i, sum = 0;


i = 1;
while (i <= 100) {
    sum = sum + i;
    i ++;
}


out.println(sum);
%>
</body>
</html>


사용자 삽입 이미지

while.jsp 실행결과


위 프로그램에서 “i ++”에 의해 결국 조건식이 변화되므로 변수 i의 값이 101이 되는 순간 반복구간을 더 이상 실행하지 않고 빠져나가고 변수 sum에는 5050이 저장되게 된다.

do문을 살펴보자. do 문은 반복구간 뒤에 while과 함께 조건식이 주어지는 구조로 형식은 다음과 같다.

do 구조

형식


do {
    실행코드
} while ( 조건식 ) ;


사용자 삽입 이미지

while~do - flowchart


위 형식과 순서도에서도 알 수 있듯 do 문은 조건식이 반복구간 뒤에 위치한 관계로 최소 한 번 이상 반복구간을 실행한 후 조건식의 결과에 따라 더 실행할 것인지 말것인지를 결정한다.

다음 프로그램 “do.jps” 역시 1에서 100까지 자연수의 합을 구하는 프로그램으로 do 문을 이용 수정한 것이다.



<%@ page language=”java” contentType=”text/html; charset=EUC-KR”
    pageEncoding=”EUC-KR”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
<%
int i, sum = 0;


i = 1;
do {
    sum = sum + i;
    i ++;
} while (i <= 100);


out.println(sum);
%>
</body>
</html>


사용자 삽입 이미지

do.jsp 실행결과


이 프로그램 역시 “while.jsp”와 마찬가지로 반복구간 내부의 “i ++”에 의해 조건식이 변화된다.

그러면 while과 do의 차이점을 아래 두 프로그램 “diff-while.jsp”와 “diff-do.jsp”를 가지고 살펴보자.



<%@ page language=”java” contentType=”text/html; charset=EUC-KR”
    pageEncoding=”EUC-KR”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
<%
int i, sum = 0;


i = 200;
while (i <= 100) {
    i ++;
}


out.println(i);
%>
</body>
</html>


사용자 삽입 이미지

diff-while.jsp 실행결과


프로그램 “diff-while.jsp”의 실행과정을 살펴보면 변수 “i”에 초기값 200이 저장되어 있다. 그 후 while 문을 실행하는데 while 문의 경우 조건식을 먼저 검사하므로 그 결과가 “200 <= 100″으로 거짓이 되어 반복구간을 실행하지 않고 바로

out.println(i);

부분을 실행한다. 따라서 변수 “i”에는 여전히 200이 저장되어 있으므로 출력결과 역시 “200”이 된다. 반면 다음 프로그램 “diff-do.jsp”의 경우을 살펴보자.



<%@ page language=”java” contentType=”text/html; charset=EUC-KR”
    pageEncoding=”EUC-KR”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
<%
int i, sum = 0;


i = 200;
do {
    i ++;
} while (i <= 100);


out.println(i);
%>
</body>
</html>


사용자 삽입 이미지

diff-do.jsp 실행결과


이 프로그램의 경우 do 문에 의해 먼저 반복구간을 실행

i ++ ;

에 의해 변수 “i”의 값은 201이 되고 조건식 “201 <= 100″에 의해 거짓이 되므로 더 이상 반복구간을 실행하지 않고 빠져나와

out.println(i);

을 실행 “201”을 출력한다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.