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

Kotlin中如何修改循环变量?特定条件下需跳过下一轮迭代

解决Kotlin区间for循环无法修改变量跳过迭代的问题

哈哈,这个坑我刚学Kotlin的时候也踩过!你用的for(i in 0..n)这种区间循环里,i是Kotlin自动帮你声明的只读val变量,所以直接给它赋值i++肯定会报val cannot be reassigned的错。别着急,给你几个靠谱的解决办法,按需选就行:

方案1:改用while循环(最直观的手动控制)

既然区间循环的变量不能改,那换成while循环就完全自由了——变量由你自己声明为var,想怎么调就怎么调:

var i = 0
while (i <= n) {
    // 这里写你的业务逻辑
    if (someCond) {
        i++ // 满足条件时多走一步,跳过下一轮迭代
    }
    i++ // 正常推进循环进度
}

这个方法的好处是逻辑一目了然,新手也能快速理解,适合简单的循环场景。

方案2:用迭代器手动控制(更安全的Kotlin风格)

Kotlin的区间可以获取迭代器,我们直接操作迭代器来跳过下一个元素,不用自己管理变量,还能避免越界问题:

val iterator = (0..n).iterator()
while (iterator.hasNext()) {
    val i = iterator.next()
    // 你的业务逻辑
    if (someCond) {
        // 先判断还有没有下一个元素,防止抛出NoSuchElementException
        if (iterator.hasNext()) {
            iterator.next() // 直接取下一个元素,相当于跳过下一轮
        }
    }
}

这个方法更符合Kotlin的迭代设计,不用担心变量操作出错,适合循环边界容易出问题的场景。

方案3:函数式风格的标记法(适合习惯链式调用的同学)

如果你偏爱函数式编程,可以用forEachIndexed配合一个标记变量来实现跳过逻辑,不过需要额外声明一个外部变量:

var shouldSkipNext = false
(0..n).forEachIndexed { _, num ->
    if (shouldSkipNext) {
        shouldSkipNext = false
        return@forEachIndexed // 跳过当前迭代
    }
    // 你的业务逻辑
    if (someCond) {
        shouldSkipNext = true // 标记下一次要跳过
    }
}

这个方法看起来更“Kotlin”,但需要维护一个状态变量,适合已经熟悉函数式编程的开发者。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:29:33