在java中,我得到了这个 struct

for (let i = 0; i < x.length-1; I++

为了避免outOfBoundsException,我们使用x.length-1,但在Kotlin中如何做同样的事情?到目前为止我得到了这个密码

x.forEachIndexed { index, _ ->
    output.add((x[index+1]-x[index])*10)
}

当我们调用x[index+1]时,它在最后一个元素上崩溃,所以我需要以某种方式处理最后一个元素

输入列表

var x = doubleArrayOf(0.0, 0.23, 0.46, 0.69, 0.92, 1.15, 1.38, 1.61)

推荐答案

对于一个classic 的Java For循环,在Kotlin中有两个选项.

一个是这样的.

val x = listOf(1,2,3,4)

for (i in 0 .. x.lastIndex){
    // ...
}

使用..,基本上从0到(包括)与第二项对应的数字,在本例中是列表的最后一个索引.(从0 <= i <= x.lastIndex开始)

第二种 Select 是使用until

val x = listOf(1,2,3,4)

for (i in 0 until x.size){
    // ...
}

这与前面的方法类似,只是until不包含最后一个元素.(从0 <= i < x.size开始).

你可能需要这样的东西

val x = listOf(1,2,3,4)

for (i in 0 .. x.lastIndex -1){
    // ...
}

或者,用until,像这样

val x = listOf(1,2,3,4)

for (i in 0 until x.size-1){
    // ...
}

这可能会避免IndexOut of bounds错误,因为您只需要到倒数第二个项目索引.

如果有什么不清楚的地方,请随时提问.

如果你想了解更多关于范围的信息,这也是一本很棒的书.https://kotlinlang.org/docs/ranges.html#progression

Kotlin相关问答推荐

最好的方法来创建一个 map 在kotlin从两个列表

数据源配置

CompositionLocal 究竟如何以及何时隐式设置值?

在 Kotlin 中,为什么我们要在闭包中捕获值

同时也是一个字符串的 Kotlin 枚举

JetPack Compose:添加点击持续时间

为什么 Kotlin 中的 Double 和 Long 类型不推荐直接转换为 Char?

如何将 `throw` 放置在辅助函数中但仍然具有空安全性?

Kotlin 编译器在构造函数中报告未使用的表达式,以便构建器采用 vararg lambda

如何判断给定字符串是否多次包含另一个子字符串?

从字符串列表构建字符串

错误:cannot find symbol import com.gourav.news.databinding.ActivityDetailBindingImpl;

对列表中数字的子集求和

如何在 Kotlin 文件中的 Android Studio 中控制何时将 Imports 替换为通配符

runOnUiThread 没有调用

Android Room - error: Cannot figure out how to save this field into database

Mockito 的 argThat 在 Kotlin 中返回 null

使用kotlinx协同程序测试中的类时出错

Kotlin var lazy init

Kotlin 是否支持部分应用程序?