fun main() {
var list1 = mutableListOf<Any>()
for(i in 0 until 5) {
list1.set(i,i)
}
println(list1)
}
Вышеприведенный код дает индекс 0 за границу для длины 0. В чем ошибка. Как поместить элементы в MutableList с помощью Index.
val list = MutableList(5) { это }
set
предназначен для замены элемента в списке, и его элемент должен существовать, если вы хотите «поместить» элемент, используйте вместо этого add
IME, создание коллекции и ее заполнение потом - это очень подход Java; в Kotlin вы чаще можете создать его предварительно заполненным, либо вызвав map()
или filter()
, либо другую функцию преобразования для существующего объекта, либо инициализировав его по мере его создания — как в однострочнике lukas.j выше.
Вы используете неправильный метод здесь.
Согласно документации набора: «Он заменяет элемент и добавляет новый по заданному индексу с указанным элементом».
Здесь вы объявляете пустой mutableList. Таким образом, попытка замены по определенному индексу приведет к исключению Array Out Of Bounds.
Если вы хотите добавить новый элемент, вам нужно использовать метод добавления: «Он добавляет данный элемент в коллекцию».
Итак, если мы используем метод добавления, это можно написать так:
fun main() {
var list1 = mutableListOf<Any>()
for(i in 0 until 5) {
list1.add(i,i)
}
println(list1)
}
Или без использования параметра индекса:
fun main() {
var list1 = mutableListOf<Any>()
for(i in 0 until 5) {
list1.add(i)
}
println(list1)
}
Вы все равно можете использовать метод set (даже если это не лучший способ), объявив начальную длину вашего изменяемого списка, как сказал @lukas.j:
fun main() {
var list1 = MutableList<Any>(5) {it}
for(i in 0 until 5) {
list1.set(i,i)
}
println(list1)
}
Вы пытаетесь
set
получить значение индекса, но для этой операции потребуется, чтобы индекс существовал, а его нет. Либо убедитесь, что слоты существуют перед циклом, либо просто добавьте значения.