for문의 경우 반복구간 내부에서 break를 만나면 즉시 수행을 멈추고 반복구간을 빠져 나간다. 그어나 continue를 만나면 증감식을 수행하고 조건식의 결과에 따라 반복구간을 수행여부를 판단한다.
for 문에서의 break, continue의 제어흐름
반면 while과 do 반복문의 반복구간에서는 break의 경우 for 문에서와 같이 즉시 반복구간을 빠져 나가지만 continue의 경우 조건식으로 분기 조건식의 결과에 따라 반복구간 수행 여부를 결정한다.
while 문에서의 break, continue의 제어흐름
do 문에서의 break, continue의 제어흐름
다음 프로그램 "for-cb.jsp"는 for 반복문에서 break와 continue를 사용한 예이다.
<%@ 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;
for (i = -2; i <= 100; i ++) {
if (i == 0) continue;
if (i > 2) break;
out.println( 100 / i );
}
out.println(i);
%>
</body>
</html>
for-cb.jsp 실행결과
우선 초기식, 조건식, 증감식을 고려했을 때 반복구간은 변수 "i"의 값이 -2에서 100까지 1씩 증가하며 총 103회 수행하도록 작성되었다. 그러나 변수 "i"의 값이 0이 되는 순간 continue를 수행하게 되므로 이하의 코드
if (i > 2) break;
out.println( 100 / i );
는 무시하고 증감식에 의해 "i" 가 1이 되고 계속 반복구간을 수행한다. 그리고 "i"가 3이 되면 break를 수행 반복구간을 빠져나간다.
다음 프로그램 "while-err-cb.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;
i = -2;
while (i <= 10) {
if (i == 0) continue;
if (i > 2) break;
out.println( 100 / i );
i ++;
}
out.println(i);
%>
</body>
</html>
이 프로그램의 실행 결과는 무한루프에 빠지게 되는 오류를 가지고 있다. 그 원인은
if (i == 0) continue;
부분에서 비롯된다. 이 프로그램에서는 변수 "i"가 10 이하인 경우 반복구간을 수행한다. 그러나 "i"가 0이 됐을 경우를 살펴보자. "i"가 0이 되면 continue를 수행하게 된다. 따라서 continue에 의해 이하의 코드
if (i > 2) break;
out.println( 100 / i );
i ++;
은 실행되지 않고 조건식을 검사하게 되는데 이 때 여전히 "i"의 값은 0이므로 무한히 continue를 실행하게 되므로 무한루프에 빠지게 되는 것이다. 따라서 이 경우
if (i == 0) continue;
부분을 다음과 같이 수정하면 무한루프에 빠지는 오류를 수정할 수 있다.
if (i == 0) {
i ++;
continue;
}
이 경우 continue를 수행하기 전 "i ++"에 의해 "i" 값이 0에서 1로 변하므로 continue는 더 이상 실행하지 않게된다. 다음 프로그램 "while-cb.jsp"는 "while-err-cb.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;
i = -2;
while (i <= 10) {
if (i == 0) {
i ++;
continue;
}
if (i > 2) break;
out.println( 100 / i );
i ++;
}
out.println(i);
%>
</body>
</html>
while-cb.jsp 실행결과
다음 프로그램 "do-cb.jsp" 역시 do 문에서 break와 continue를 사용한 예다. 이 프로그램에서도 break와 continue의 제어흐름은 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;
i = -2;
do {
if (i == 0) {
i ++;
continue;
}
if (i > 2) break;
out.println( 100 / i );
i ++;
} while (i <= 10) ;
out.println(i);
%>
</body>
</html>
do-cb.jsp 실행결과