You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

for循环中的iterator变量修改报错,如何将'i'设置为mutable可变变量?

Kotlin 中使用 for (i in array.indices) 语法遍历数组下标时,循环变量 i 是系统隐式声明的 不可变val变量,所以你在循环体内直接修改 i 的值会触发编译报错,你没法直接把这个隐式声明的变量改为可变类型。

以下是两种适配不同场景的解决方法:

方案1:使用while循环自行管理下标(适用于需要动态调整遍历进度的场景)

如果你修改下标是为了调整后续遍历的位置(比如回退、跳过指定数量的元素),直接改用while循环,手动声明可变的下标变量即可:

// 自行声明可变的下标变量i
var i = 0
while (i < array.size) {
    if (array[i] == 10) {
        i -= 2
    }
    // 循环末尾统一处理下标自增
    i++
}

方案2:复制循环变量为可变副本(仅适用于无需调整遍历进度的场景)

如果你不需要改变遍历的整体进度,只是需要在当前轮次的逻辑中修改下标值做其他计算,可以把隐式的不可变i赋值给一个自定义的可变变量:

for (i in array.indices) {
    // 复制为可变变量,仅当前轮次生效
    var mutableI = i
    if (array[mutableI] == 10) {
        mutableI -= 2
        // 注意:此处修改的只是当前轮次的副本,不会影响下一轮循环的i值
    }
}

注意:如果有动态调整遍历进度的需求,不要使用for-in循环的写法,即使声明了可变副本也无法改变下一轮循环拿到的下标值。

内容的提问来源于stack exchange,提问作者alexbayker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 02:24:03