JAVA 2011. 5. 31. 23:47
똑같은 명령을 반복 수행 하는 프로그램을 짜기위해 조건문을 무식하게 여러번쓰는건 비효율적이다.

그럴 때를 위해 반복문이란 것을 쓰는데, 자바에서의 반복문은 세가지로, while, do, for문이다.

while 반복문

while문의 기본형식은 다음과 같다.

while ( 조건식 )     ------ 조건식이 true 인지 false인지 판별한다
      실행 부분        ------ 조건식이 true 일 때 수행한다.

while문은 조건식을 판별하여 true이면 실행부분을 수행하고 조건식을 다시 판별하고, 

이런식으로 조건식 > true > 실행부분 무한 반복이다. 한번 돌 때마다 조건식은 다시

계산되지만 계속 참이라면 무한루프에 빠진다. 

class whileTest {
public static void main(String args[]){
int i = 0;
while ( i < 5){
System.out.println(i);
i++;
}
System.out.println("Done.");
}
}
위와 같이 프로그램을 짜면 처음에 i에 0이 들어가고 5미만이므로 while문을 만족하고 

안으로 들어가  System.out.println(i); 를 수행하여 0을 찍고 i++; 로 0에서 1이된다.

그러고 다시 while 조건식으로 가서 참인지 거짓인지 판별하고, 그렇게 0,1,2,3,4가 찍히고

5일 때 false가 뜨며 빠져나와  "Done."이 찍힌다. 

do-while 반복문
 
do-while의 기본형식은 이렇다

do
  실행부분              ----- 조건식이 참 일 동안 반복 실행되는 부분
while(조건식);        ----- 참 또는 거짓 값을 산출할 수 있는 식.

do-while 은 while과 달리 do부분 , 즉 실행부분을 무조건 한번 실행하고 다음부터

조건식으로 참, 거짓을 판별한다. 

class dowhileTest {
public static void main(String args[]){
int i = 0;
do{
System.out.println(i);
i++;
} while ( i < 5);
System.out.println("Done.");
}
}
위와 같이 짜면 일단 무조건 0을 찍고 i++로 i를 1로 만든다음 조건식으로 간다.

뭐 대단한거 같아도 결과는 while과 같은 0,1,2,3,4 찍고 만다.  

System.out.println("Done."); 얘가 while 아랫줄에 있다고 while조건식 읽고

찍히는게아니다. while조건식 판별하고 참이면 do로 올라간다. 

for 반복문

for 문으로 만든 반복문은 주어진 횟수만큼 처리를 반복하거나 배열 항목을 순서대로 처리할 때 

적합하다. 기본형식은 아래와 같다.

for ( 초기화식 ; 조건식 ; 업데이트식)
  실행 부분


어려운 거 같아도, 초기화식은 사용할 값의 초기값, 조건식은 위 while문의 조건식마냥 조건이 들어가고

업데이트 식은 i++ 도는 i-- 등과 같이 변수의 값을 바꾸는 식이 들어간다.

for( int i = 0; i < 10; i++)
   System.out.println(i); 이렇게 말이다.


class forTest {
public static void main(String args[]){
for(int i = 0; i < 5; i++){
System.out.println(i);
}
System.out.println("Done.");
}
}
위와 같다. 결과는 똑같다 0,1,2,3,4 찍히고 Done이다.

향상된 for 문

for문의 카운트가 오로지 배열의 인덱스로만 사용된다면 향상된 for문을 사용할 수 있다.

* 향상된 for문은 JDK 5.0 부터 지원한다.

for ( 변수타입 변수이름 : 배열이름)
   실행부분


for ( int i : arr)
   System.out.println(i); 


이런 형식으로 사용한다면 배열의 항목 수 만큼 실행부분을 반복하는데 매번 반복할 때마다

배열 항목의 값을 변수에 자동으로 대입한다. 예제는 아래와 같다.

class forTest {
public static void main(String args[]){
int arr[] = {10,20,30,40,50};
for(int i : arr){
System.out.println(i);
}
System.out.println("Done.");
}
}
이런식으로 사용하면 저절로 arr[] 에 i 가 들어가서 arr[i] 가 찍힌다.

System.out.println(i); 여기에 i 가 찍힌다고 0,1,2,3,4 이렇게 수행 횟수가 찍히는게 아니다.

향상된 for 문에도 단점은 있는데 여기서 나온 값인 i 는 사용할 수만 있고 바꿀수는 없다.

break 문

위의 세가지 반복문을 빠져나가고 싶으면 빠져나가고 싶은 부분에 break;를 걸어주면 

위에서 수행하고 break;를 만나며 그 반복문을 빠져나오게 된다.

class breakTest {
public static void main(String args[]){
for(int row = 0 ; row <3; row++){
for(int col = 0 ; col < 3; col++){
System.out.println("("+ row+","+col+")");
if((row == 1 )&&(col == 1))
break;
}
}
System.out.println("Done.");
}
}
이렇게 하면 
(0,0)
(0,1)
(0,2)
(1,0)
(1,1)
(2,0)
(2,1)
(2,2)
Done.
.

1,1 일 때 break; 가 걸려 빠져나와 버린다. 그럼 row의 1은 더이상 수행하지 않고 빠져나오고

2로넘어가 나머지를 수행한다. 여기서 중첩된 반복문을 전부 빠져나가는 방법은 이렇다.

앞에 반복문에 라벨을 붙여놓고 break  문에 해당 라벨을 같이 써주면 중간에 반복문이

몇개가 겹쳐있던 라벨이 있는 밖으로 빠져나간다.

loop:
for(int row = 0 ; row < 3; row++){
for(int col = 0 ; col < 3; col++){
System.out.println("("+ row+","+col+")");
if((row == 1 )&&(col == 1))
break loop;
}
}
이렇게 말이다.

반복문을 계속하는 continue 문

기본형식은 이렇다 .

continue;

이 문을 만나면 바로 반복문의 다음번 과정으로 넘어간다, continue 아래에 있는 구문은

수행되지않고 바로 위로 올라가 다음번 반복문을 수행한다.

class continueTest {
public static void main(String args[]){
for(int col = 0 ; col < 10; col++){
if(col == 5)
continue;
System.out.println(col);
}
System.out.println("Done.");
}
}
이렇게 하면 5가 들어올 시 continue를 만나 바로 6으로 넘어가기 때문에

아래 System.out.println(col);가 안찍히게되고 0,1,2,3,4,6,7,8,9, 와같이 

5가 안 찍힌다.

break 문은 라벨을 이용하여 밖의 반복문으로 빠져나왔지만 continue는

라벨을 이용하여 바깥쪽 반복문을 다음번 과정으로 수행할 수 있다.  


길긴 하지만, 프로그램 짜보면서 가장 많이 써본 for문에 대해 다시 개념을 잡게됐다. 

특히 향상된 for문은 잘쓰면 아주 간결하고 깔끔할 것 같다. 사용만 할 수 있는게 

흠이긴 하다..







출판사 : 한빛미디어 , 저자 : 김윤명 님의 뇌를 자극하는 Java프로그래밍에서 공부한 내용입니다.

'JAVA' 카테고리의 다른 글

JAVA] 12. 익셉션 처리에 사용되는 try 문  (0) 2011.06.02
JAVA] 11. 매소드 호출문  (0) 2011.06.02
JAVA] 9. 조건문  (0) 2011.05.31
JAVA] 8. 배열의 선언, 생성, 이용  (0) 2011.05.28
JAVA] 7. 여러가지 대입문  (1) 2011.05.26
posted by 젊은쎄오
: