untilを使った繰り返しを実行できるようにしたい。
前提
短いコードです。可変のリストを作り、for文で回しながら、中身が文字列の2だった場合に、そのインデックスの要素をリストから消去するといったことをしたいです。
この場合、lsit.sizeは3です。untilを使って、0から3未満まで回しているので、インデックスも0,1,2となるはずです。サイズが3なので何も問題はないように思えてしまいます。しかしインデックスを超えているというエラーが出ます。これはどうしてでしょうか。
発生している問題・エラーメッセージ
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 2 out of bounds for length 2 at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106) at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302) at java.base/java.util.Objects.checkIndex(Objects.java:385) at java.base/java.util.ArrayList.get(ArrayList.java:427) at MainKt.main(Main.kt:6) at MainKt.main(Main.kt)
該当のソースコード
kotlin
1fun main() { 2 val list: MutableList<String> = mutableListOf("1", "2", "3") 3 4 5 for (i in 0 until list.size) { 6 if (list[i] == "2") { 7 list.removeAt(i) 8 } 9 } 10 println(list) 11}
試したこと
list.size-1にすると正常に動きました。しかしどうしてそうなるのかが理解できません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
