알고리즘 공부를 하다가 향상된 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 |