What causes this output "0. Создать архив
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1
	at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
	at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
	at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
	at java.base/java.util.Objects.checkIndex(Objects.java:359)
	at java.base/java.util.ArrayList.get(ArrayList.java:427)
	at Menu.run(Menu.kt:26)
	at MainKt.main(Main.kt:7)
	at MainKt.main(Main.kt)" when running "fun main() {
    val menuLevelList = listOf("список архивов", "архив", "список заметок", "заметка")
    var archiveList = Menu<Menu<*>>(menuLevelList, 0,null)
    archiveList.run()
    println("Програма завершена")
}" with package "import java.util.Scanner
open class Menu<E>(
    val menuLevelList : List<String>,
    val level : Int,
    val previousElement: Menu<E>?
) {
    open var contents: MutableList<Pair<String, Menu<E>?>> =
        mutableListOf(
            Pair("Имя элемента", null)
        )//список элементов меню."0." по задумке всегда
    // будет отведён в консоли на создание нового элемента. Т.к. 0 мне не нужен - этим заодно и
    // индекс приравниваю к номеру опции, и инициализацую переменной делаю.


    fun run() {
        var command = -1 //сюда закинем номер комманды для передачи в select
        while (true) { //крутим вывод опций/ввод до тех пор пока не получим рабочий ввод

            if (this.menuLevelList.get(level) != this.menuLevelList.last()) {
                println("0. Создать ${menuLevelList.get(this.level + 1)}")
            }  //если не последний элемент
            // - покажем опцию пополнить список текущего меню

            for (i in 1 until contents.size + 1) {
                println("$i. ${contents.get(i).first}")
            } //выводим все элементы текущего меню

            if (this.previousElement == null) {
                println("${contents.size + 1}. Завершить програму")
            } else {
                println("${contents.size + 1}. Назад")
            }

            val input: String = Scanner(System.`in`).nextLine() //всё вывели, получаем ввод
            //и фильтруем его на наличие ошибок.Немного рефлексирую что не оформил в when, но мне то
            // String, то Int, то Int+условие нужно, было неудобно, сдался.
            if (input == "") {
                println("Ошибка: пустой ввод")
                continue
            }

            if (input.toIntOrNull() == null) {
                println("Ошибка: введено не число")
                continue
            }
            if ((input.toInt() > (contents.size + 1)) || (input.toInt() < 0)) {
                println("Ошибка: команды для данного номера не существует")
                continue
            }
            if (input.toInt() == 0 && this.menuLevelList.get(level) == this.menuLevelList.last()) {
                println("Ошибка: команды для данного номера не существует")
            }

            command = input.toInt()
            break
        }
        this.select(command)
    }

    fun select(number: Int) {
        when (number) {
            0 -> this.createNew()

            in 1..this.contents.size -> this.contents.get(number).second!!.run()

            this.contents.size + 1 -> this.back()
        }
    }

    fun createNew() {
        if (this.menuLevelList.get(level) != this.menuLevelList.last()) {
            println("Ошибка: команды для данного номера не существует")
            this.run()
        }

        var name = ""
        while (true) {
            println("Создаётся ${this.menuLevelList.get(level + 1)}. Введите название")
            val input: String = Scanner(System.`in`).nextLine()
            if (input == "") {
                println("Ошибка: пустой ввод")
                continue
            }
            name = input
            break
        } //крутим луп до ненулевого ввода для названия эелемента
        if (this.menuLevelList.get(level+1)!=this.menuLevelList.last()){
            val newElement = Menu(this.menuLevelList,level+1,this)
            contents.add(Pair(name, newElement)) //если следующий элемент не последний в нашем
        // списке уровней меню - он будет тоже Menu
        } else {
            println("Создаётся ${this.menuLevelList.get(level + 1)}. Введите содержание.")
            var text = ""
            while (true) {
            val input: String = Scanner(System.`in`).nextLine()
                if (input == "") {
                    println("Ошибка: пустой ввод")
                    continue
                }
            text=input
            break
        }} //если следующий элемент - последний, крутим луп до ненулевого ввода и делаем это
        // текстом нашей заметки(в этом случае, код можно использовать для других интерфейсов тоже)

        this.run()
    }

    fun back() {
        if (previousElement != null) {
            previousElement!!.run()
        }
        //т.к. метод не перезапускает run(), то програма завершится
    }
}"