- 채점
- 런타임 에러
- 런타임 에러 (IndexOutOfBounds)
IndexOutOfBounds
java.lang.IndexOutOfBoundsException
, java.lang.ArrayIndexOutOfBoundsException
, java.lang.StringIndexOutOfBoundsException
모두 범위를 벗어났을 때 발생합니다.
ArrayList
소스 1. ArrayList
의 IndexOutOfBounds
a
에는 총 n
개의 정수를 넣었고, a.get(0)
, a.get(1)
, ..., a.get(n-1)
만 사용할 수 있습니다. 9번 줄의 a.get(n)
에서 java.lang.IndexOutOfBoundsException
가 발생합니다. 다음은 소스 1의 런타임 에러 메시지입니다.
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 10, Size: 10 at java.util.ArrayList.rangeCheck(ArrayList.java:657) at java.util.ArrayList.get(ArrayList.java:433) at Main.main(Main.java:9)
ArrayList
에서 음수 인덱스에 접근하는 경우에는 java.lang.ArrayIndexOutOfBoundsException
이 발생합니다.
소스 2. ArrayList
의 ArrayIndexOutOfBounds
다음은 소스 2의 런타임 에러 메시지입니다.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 at java.util.ArrayList.elementData(ArrayList.java:422) at java.util.ArrayList.get(ArrayList.java:435) at Main.main(Main.java:9)
배열
배열도 ArrayList
와 비슷하지만, 범위를 벗어나는 모든 경우에 java.lang.ArrayIndexOutOfBoundsException
가 발생합니다.
소스 3. 배열의 ArrayIndexOutOfBounds
a
의 크기는 10이기 때문에, a[100]
은 범위를 벗어나 런타임 에러가 발생합니다.
다음은 소스 3의 런타임 에러 메시지입니다.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100 at Main.main(Main.java:9)
문자열
배열과 마찬가지로 범위를 벗어나는 모든 경우에 java.lang.StringIndexOutOfBoundsException
가 발생합니다.
소스 4. 문자열의 StringIndexOutOfBounds
s
의 길이는 8이기 때문에, s.charAt(8)
은 범위를 벗어납니다. 따라서, i
가 8이 되는 순간 런타임 에러가 발생합니다. 다음은 소스 4의 런타임 에러 메시지입니다.
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 8 at java.lang.String.charAt(String.java:658) at Main.main(Main.java:6)