[Kotlin] for 루프에서 리스트에 원소 추가, 루프 끝나고 원소 하나 더 추가 => 오류 발생

forEachIndexed 블록 안의 for 루프 안에서 리스트에 원소를 추가하였다. 이 루프가 끝나고 그 리스트에 원소를 하나 더 추가하자 오류가 발생했다( java.lang.IndexOutOfBoundsException). if 문을 써서 문제를 해결했다.

for 루프 밖에서 원소를 하나 더 추가하자 오류 발생

val numbers: MutableList<MutableList<Int>>
// numbers 는 이미 다른 곳에서 초기화 되어 있다.
val intervals: MutableList<MutableList<Int>> = mutableListOf()
for (i in 0 until 10) {
            intervals.add(mutableListOf())
        }

numbers.forEachIndexed { index, item ->
            for (i in (1 until item.size))
                intervals[index].add(item[i] - item[i - 1])
            intervals[index].add(10)
        }

이렇게 했더니 오류가 발생했다:

java.lang.IndexOutOfBoundsException

if 문을 써서 문제 해결

for 루프 안에서 조건문을 써서 마지막 원소를 추가하자 문제가 해결되었다:

numbers.forEachIndexed { index, item ->
for (i in (1..item.size))
if (i < item.size) {
intervals[index].add(item[i] - item[i - 1])
} else {
intervals[index].add(10)
}
}

논리는 같은데 왜 오류가 나고 안 나고 차이가 있는지 모르겠다.

내 앱의 코틀린 버전은 1.9.10 으로 설정되었다:

id("org.jetbrains.kotlin.android") version "1.9.10" apply false

Leave a Comment