for 문

By | 2009년 3월 9일

프로그램의 제어문에서 조건이 참인 동안 특정 구간을 반복 실행하는 제어문을 반복문이라 한다. for 문은 대표적인 반복문으로 형식과 순서도는 다음과 같다.

for 구조

형식


for ( 초기식; 조건식; 증감식 ) {
    실행코드
}


사용자 삽입 이미지

for - flowchart


위 형식에서 초기식은 for 문에서 가장 먼저 실행되는 부분으로 단 한번 수행한다. 조건식은 반복구간(위 형식에서 실행코드 부분)을 수행할 것인지 말 것인지를 판단하기 위한 식으로 결과가 참이면 반복구간을 수행하고 거짓인 경우 반복구간을 수행하지 않고 빠져 나온다. 마지막 증감식은 반복구간을 수행한 후 조건식을 비교하기 전 수행하는 식으로 일반적으로 조건식을 변화시키는 코드가 온다.

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



<%@ 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;


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


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


사용자 삽입 이미지

for.jsp 실행결과


위 프로그램에서 변수 i의 값은 1에서 100까지 1씩 증가하며 반복구간의 코드

sum = sum + i ;

를 실행 변수 sum에 누적된 합을 저장하는데 결과적으로 sum에는 5050이 저장되고

out.println(sum) ;

에 의해 5050이 출력된다.

다음 프로그램을 살펴보자. 다음 프로그램 “for-err-inc2.jsp”는 0에서 100까지의 정수 중 짝수의 합을 구하기 위한 프로그램이다. 그러나 이 프로그램을 실행하면 다음과 같이 오류메세지를 출력한다.



<%@ 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;

for(i = 0; i <= 100; i + 2) {
    sum = sum + i;
}


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


사용자 삽입 이미지

for-err-inc2.jsp 실행결과

오류의 원인은 증감식 때문이다. “for-err-inc2.jsp”에서 변수 i의 값은 초기식에 의해 0이 된다. 그리고 조건식이 “0 <= 100″으로 참이 되므로 반복구간

sum = sum + i ;

가 실행된다. 이 때 sum의 값은 0이므로 “sum = 0 + 0″에 의해 sum에는 다시 0이 저장된다. 그 후에 증감식

i + 2

가 실행되는는 이 때 i 의 값은 0이므로 “0 + 2″이 실행되고 다시 조건식을 비교하게 된다. 그런데 이 때 i의 값은 변화되지 않고 여전히 0이므로 조건식 역시 여전히 “0 <= 100″로 참이된다. 즉 아무리 수행해도 변수 i 값은 변하지 않고 반복구간을 무한히 수행하는 무한루프에 빠지게 되기 때문에 오류 메세지를 출력하는 것이다. 그러므로 증감식 부분을 다음과 같이

i = i + 2 또는 i += 2

로 고침으로써 원하는 결과를 얻을 수 있다. 아래 프로그램 “for-inc2.jsp”는 “for-err-inc2.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 ;


for(i = 0; i <= 100; i = i + 2) {
    sum = sum + i ;
}


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


사용자 삽입 이미지

for-inc2.jsp 실행결과


다음 프로그램 “multiply.jsp”를 살펴보자. 이 프로그램을 살펴보면 for문 내부에 다른 for문이 중첩된 경우이다.



<%@ 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, j;


for(i = 1; i <= 9; i ++) {
    for(j = 1; j <= 9; j ++) {
        out.println(i * j);
        out.println(” “);
    }
    out.println(“<br>”);
}%>
</body>
</html>


사용자 삽입 이미지

multiply.jsp 순서도


사용자 삽입 이미지

multiply.jsp 실행결과


프로그램과 순서도를 살펴보면 이 경우 바깥쪽 for 문은 아홉번 실행되는데 바깥쪽 for 문이 한 번 실행될 때마다 안쪽 for 문의

out.println(i * j);
out.println(” “);

부분은 아홉 번 실행되므로 결과적으로 이 부분은 총 81(9 x 9) 회 실행된다.

답글 남기기

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

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