Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

KotlinでmutableListOfを用いたリストにて削除するときにエラーが発生します

解決したいこと

mutableListOfを用いたリストにて、removeAtを用いて削除をしたいです。

先ほどKotlinの開発を始めたばかりで、下記サイトを参考にしながら進めています。
https://codeforfun.jp/android-studio-quiz-game-with-kotlin-4/

環境

OS:Windows
IDE:Android Studio
API:31
機種:実機/Pixel6

発生している問題・エラー

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{Hoge.Fuga/Hoge.Fuga.MainActivity}: java.lang.IndexOutOfBoundsException: Index: 4, Size: 4

該当するソースコード

list.removeAt(0)をコメントアウトすると、すべて正常に動きますが、removeAt(0)を記述するとエラーが発生します。

    
    //リスト
    private val lists = mutableListOf(
        mutableListOf("aaa", "bbb", "ccc", "ddd", "eee"),
        mutableListOf("fff", "ggg", "hhh", "iii", "jjj")
    )
    
    //まず呼び出される部分
    override fun onCreate(savedInstanceState: Bundle?) {
        ...省略

        //とある関数を呼び出し
        TestFunc()
    }
    
    fun Test() {
        val list = lists[0]
    
        //この時点では5つとも文字が入っていて、Logcatにログ出力される
        Log.d("Tag", list[0]) //aaa
        Log.d("Tag", list[1]) //bbb
        Log.d("Tag", list[2]) //ccc
        Log.d("Tag", list[3]) //ddd
        Log.d("Tag", list[4]) //eee
        
        //ここでエラー。リストの最初の"aaa"を番号指定の「removeAt」で削除したい。
        list.removeAt(0)
        
        //「list.removeAt(0)」をコメントアウトしてビルドするとここ以降も正常に動く...
        ...省略
    }
0 likes

1Answer

エラーメッセージに書いてあるとおりですが、長さ4のリストのインデックス4番(=5つ目の要素)を取得しようとしてエラーが起きています。原因は list.removeAt(0) ではなく、それによってリストが短くなることを想定していないどこかのコードにあります。

0Like

Comments

  1. @user093t20t0

    Questioner

    ありがとうございます。助言いただいたおかげで無事原因が分かり解決いたしました。
    お恥ずかしいことにlist.remove(0)でエラーは発生しておらず、その後の処理が原因でした...

Your answer might help someone💌