kotlin: Дан массив размера N. Найти номера двух ближайших элементов из этого массива

Рейтинг: -1Ответов: 1Опубликовано: 19.07.2023

Код:

var n = 5
var a = IntArray(n){(Math.random()*10).toInt()}

println(a.joinToString())

var k = 0
var k2 = 0

for (i in 0..n-1) {
    if (a[i]<=a[i+1]) {
        k=i
        k2=i+1
    }
}

println("$k $k2")

Выдает ошибку

Array index out of range: 5

Ответы

▲ 2Принят

В цикле вы обращаетесь к элементам массива с индексами i и i + 1. Чтобы не выйти за пределы массива, используйте метод until вместо оператора ..:

for (i in 0 until n - 1) {
    ...
}

Отличие метода until от .. (или rangeTo) в том, что он возвращает диапазон чисел, исключая последнее значение, например:

println((1..4).toList())
// получим [1, 2, 3, 4]
println((1 until 4).toList())
// получим [1, 2, 3]