본문 바로가기

언어공부/Java

자바 반복문 - for문/확장 for문(향상된 for문)

자바 반복문에 대해서 알아보자.

프로그램의 흐름을 바꾸는 역할을 하는 문장들을 제어문이라고 하며, 제어문에는 조건문과 반복문이 있다.

반복문은 조건에 따라 문장이 반복 수행되도록 한다.

for문

for문 구조

for문의 구조는 위와 같으며, 조건식이 참인동안 괄호 안의 문장들을 반복하다 거짓이 되면 반복문을 벗어난다. 처음엔 초기값(변수에 최초의 값을 저장)을 실행하며, 조건식에 참일 동안 괄호 안에 문장을 반복 실행한다. 

 

초기치 >> 반복문에 사용될 변수를 초기화하는 부분이며 처음에 한번만 수행된다.

for(int i=1;i<=10;i++){  } //int타입 변수 i의 값을 1로 선언 및 초기화한다.

for(int i=1, j=1;i<=10;i++){  } //int타입 변수 i와 j를 선언 및 초기화한다.

 

조건식 >> 조건식의 값이 참일동안 반복을 계속하고, 거짓이면 반복을 중단해 for문을 벗어난다.

for(int i=1;i<=10;i++){  } //i<=10일 동안 괄호안의 문장을 반복 수행한다.

 

증감식 >> 반복문을 제어하는 변수의 값을 증가 또는 감소시킨다. 문장이 1번 실행될 때마다 변수의 값이 증감되어 나중에 조건식이 거짓이 되어 for문을 벗어난다.

for(int i=1;i<=10;i++){  }  // i가 1씩 증가된다.

for(int i=10;i>=1;i--){  }  // i가 1씩 감소된다.

for(int i=1;i<=10;i+=2){  }  // i가 2씩 증가된다. (i+=2 > i=i+2)

 

세 가지 요소들은 쉼표를 이용해서 두 문장 이상을 하나로 연결해서 쓸 수있다. 또한 이 요소들은 필요하지 않으면 생략할 수 있으며, 모두 생략도 가능하다. >> for( ; ; ) { } 으로 무한반복문이 된다.

 

for문 예제 1

위의 예제를 보면, for문에서 i=0으로 선언 및 초기화를 하며, 조건식이 i<5로 i가 0~4일 때까지 총 5번 반복하게된다. 출력 결과로는 "Hello java"라는 문장이 5번 출력된다.

 

for문 예제 2

위의 예제를 보면, for문에서 i=2로 선언 및 초기화를 하며, 조건식이 i<=10으로 i가 2~10일 때까지 총 5번 반복하게된다. (왜냐하면 증감식에서 i가 2씩 증가되므로 i=2, 4, 6, 8, 10이 된다.) 출력 결과로는 변수 sum에 i의 값이 계속 더해지면서 2+4+6+8+10으로 "짝수들의 누적합 =30"이 출력된다.

 

for문 예제 3

위의 예제를 보면, 일단 Scanner 클래스에서 반복횟수를 입력 받으며, 이 반복횟수는 변수 num에 대입된다. 아래 for문에서는 i=0으로 선언 및 초기화를 하며, i<num으로 아까 입력받은 반복횟수 미만으로 만약 num=5가되면 i는 0,1,2,3,4로 총 5번 아래 문장이 실행되어 "#####"가 출력된다.

 


확장 for문 (향상된 for문) >>JDK1.5 이상

확장 for문은 JDK 1.5이상 부터 배열과 컬렉션에 저장된 요소에 기존 for문 보다 접근하기 편리한 방법으로 처리할 수 있도록 새롭게 추가되었다.

 

확장 for문 구조

확장 for문의 구조는 위와 같으며, 세미콜론(;)이 아닌 콜론(:)으로 구분한다. 변수명 : 배열명으로 선언한 뒤, 변수명을 출력하면 해당 인덱스대로 배열원소값이 출력된다. 확장 for문은 일반적인 for문과 달리 배열과 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용할 수 있다.

 

확장 for문 예제 1

위의 예제를 보면, k변수를 선언하고, score 배열에 대한 원소값을 출력하는 확장 for문이다. 또는 sum변수를 선언하고, sum+=k; 문장을 추가해 score변수의 원소값의 누적합들도 구할 수 있다.

 

확장 for문 예제 2
출력

위의 예제를 보면, str변수를 선언하고, names 배열에 대한 원소값을 출력하는 확장 for문이다. 추가로 rev변수를 선언해서 rev=str+rev;문장으로 원소값들을 거꾸로 출력되게 할 수 있다. print(str+" ");에서 배열 원소값 그대로 "김 Park Yi"가 출력되며, println("\n"+rev);에서는 배열 원소값이 거꾸로 출력되어 "YiPark김"이 출력된다.