如何在 Kotlin 循环内更改 for 循环的计数器变量值?

Rut*_*vik 2 variables loops for-loop variable-assignment kotlin

我是 Kotlin 新手,为了练习,我正在将 Java 代码转换为 Kotlin。

这样做时我面临一个问题,即我无法更改 for 循环内的计数器值。它实际上说变量是val.

for (i in 0..tokens.size){
    // some code
    if (memory[pointer]!=0)
        i=stack.peek() // error here showing : val cannot be reassigned
}
Run Code Online (Sandbox Code Playgroud)

我真的希望在循环内更改计数器变量。有没有其他方法可以在 Kotlin 中实现这一目标而不出现任何错误?

bro*_*oot 6

请注意,for...in循环不是带有计数器的循环,而是 foreach 循环 - 即使您使用 range 进行迭代(好吧,至少在概念上是这样,因为在内部它实际上已优化为带有计数器的循环)。您无法跳转到数组/列表中的另一个项目,因为for并没有真正“理解”迭代背后的逻辑。即使您能够修改 的值i,那么在下一次迭代中它也会重置为下一项。

您需要改用while

var i = 0
while (i < tokens.size) {
    if (memory[pointer]!=0)
        i=stack.peek()

    i++
}
Run Code Online (Sandbox Code Playgroud)

另请注意,您的原始代码包含一个相差一的错误。在最后一次迭代中,这i可能tokens.size不是您所需要的。