본문 바로가기

이것저것 알게된 것

향상된 for문


알고리즘 공부를 하다가 향상된 for문에 대해 보다 정확하게 개념정리를 할 수 있었다.


먼저 향상된 for문의 개념이다.

향상된 for문 ?

for(타입 변수명 : 배열 또는 컬렉션) {    반복할 문장;    }

변수의 타입은 배열 또는 컬렉션의 타입과 같아야 한다.

향상된 for문은 배열 또는 컬렉션에 저장된 값을 순서대로 읽어서 변수에 저장하고 -> 반복할 문장이 있다면 실행하고 

-> 변수에 모두 저장하게 되면 반복문에서 빠져나간다.


public class for_each {

public static void main(String[] args) {

int arr[] = new int[3];

for(int i=0; i<arr.length; i++)

{

arr[i] = i+1;

System.out.println(arr[i]);

}

for(int i : arr)

{

arr[i] = i+1;

System.out.println(arr[i]);

}

}

}

이것을 실행하면 결과값은

1

2

3

2

3

ArrayIndexOutOfBoundsException 에러가 뜬다.


첫번째 for문에서

arr에는 1 2 3 이 들어가게 된다.

하지만 두번째 향상된 for문의 실행과정에서 에러가 일어난다.

먼저 두번째 향상된 for문은 arr의 길이만큼 실행하게 된다.

arr의 길이 3만큼 실행하는데, 먼저 arr[0]번째 값인 1을 가져온다. 가져와서 i에 담는다 i=1

반복문장 실행

arr[1] = 1+1

2출력

---------------------------------------------

arr[1]번째 값 2를 가져온다. i에 담고, i=2

arr[2] = 2+1

3출력

-----------------------------------------------

arr[2]번째 값 3을 가져온다. i에 담고, i=3

arr[3] = 3+1  ---- 에러

종료

-----------------------------------------------

arr의 길이는 3으로 인덱스는 2까지 존재 한다. 따라서 허용가능한 인덱스 범위 초과로 에러가 발생한다.


이처럼 향상된 for문에서 주의할 것

1. 지정해준 배열 또는 컬렉션의 값을 차례로 가져와서 변수에 먼저 담고 반복문장을 실행한다는것

2. 따라서 담으려고 하는 변수의 타입이 배열 또는 컬렉션의 타입과 같아야 한다는 것 

이다.


public class for_each {

public static void main(String[] args) {

int arr[] = new int[3];

for(int i=0; i<arr.length; i++)

{

arr[i] = i+1;

System.out.println(arr[i]);

}

for(int i : arr)

{

System.out.println(i);

}

}

}


실행결과

1

2

3

1

2

3


향상된 for문을 사용할 때는 arr[i]값이 아니라 바로 i값을 출력해서 저장된 내역들을 읽어올 수 있는 것이다.


따라서 향상된 for문은 배열 또는 컬렉션의 저장된 내역들을 읽어내는 용도로 사용하면 좋을 것이다.




'이것저것 알게된 것' 카테고리의 다른 글

2차원배열 특정값으로 채우기  (0) 2019.08.02
char형 연산  (0) 2019.07.20
비트연산자  (0) 2019.07.20
필드와 변수의 차이,선언위치,초기화  (0) 2019.07.16
Scanner와 BufferedReader  (0) 2019.06.19