如何在 Kotlin 循环内更改 for 循环的计数器变量值?
How to change the counter variable value of for loop inside the loop in 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
}
我真的希望在循环内更改计数器变量。有没有其他方法可以在 Kotlin 中没有任何错误地实现这一目标?
在 Kotlin 中,val
变量等同于 Java 的 final
,这意味着它们一旦赋值就无法更改。当您希望重新分配变量时,请改用 var
。如果可能,您应该保留 val
以防止意外重新分配。
示例:
var a = 5
a = 4 // works
val b = 5
b = 4 // compiler error!
编辑
for循环中的变量默认为val
,不可更改。为了实现带跳转的循环,需要用while
循环代替。
请注意,for...in
循环不是带计数器的循环,而是 foreach 循环 - 即使您使用 range 进行迭代(好吧,至少在概念上是这样,因为在内部它实际上被优化为带有柜台)。您不能跳转到 array/list 中的另一个项目,因为 for
并不真正“理解”迭代背后的逻辑。即使您能够修改 i
的值,然后在下一次迭代中它将重置为下一个项目。
您需要使用 while
来代替:
var i = 0
while (i < tokens.size) {
if (memory[pointer]!=0)
i=stack.peek()
i++
}
另请注意,您的原始代码包含一个差一错误。在上一次迭代中,i
将变为 tokens.size
,这可能不是您需要的。
kotlin 循环变量(在您的例子中是 i
)是使用 val
隐式声明的,因此您不能重新分配它们。您唯一的选择是使用 while
循环并更新在循环外声明的变量。
The for-loop is actually an overloadable syntax form with the
following expansion:
for(VarDecl in C) Body
is the same as
when(val $iterator = C.iterator()) {
else -> while ($iterator.hasNext()) {
val VarDecl = __iterator.next()
<... all the statements from Body>
} } ```
我是 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
}
我真的希望在循环内更改计数器变量。有没有其他方法可以在 Kotlin 中没有任何错误地实现这一目标?
在 Kotlin 中,val
变量等同于 Java 的 final
,这意味着它们一旦赋值就无法更改。当您希望重新分配变量时,请改用 var
。如果可能,您应该保留 val
以防止意外重新分配。
示例:
var a = 5
a = 4 // works
val b = 5
b = 4 // compiler error!
编辑
for循环中的变量默认为val
,不可更改。为了实现带跳转的循环,需要用while
循环代替。
请注意,for...in
循环不是带计数器的循环,而是 foreach 循环 - 即使您使用 range 进行迭代(好吧,至少在概念上是这样,因为在内部它实际上被优化为带有柜台)。您不能跳转到 array/list 中的另一个项目,因为 for
并不真正“理解”迭代背后的逻辑。即使您能够修改 i
的值,然后在下一次迭代中它将重置为下一个项目。
您需要使用 while
来代替:
var i = 0
while (i < tokens.size) {
if (memory[pointer]!=0)
i=stack.peek()
i++
}
另请注意,您的原始代码包含一个差一错误。在上一次迭代中,i
将变为 tokens.size
,这可能不是您需要的。
kotlin 循环变量(在您的例子中是 i
)是使用 val
隐式声明的,因此您不能重新分配它们。您唯一的选择是使用 while
循环并更新在循环外声明的变量。
The for-loop is actually an overloadable syntax form with the following expansion:
for(VarDecl in C) Body
is the same aswhen(val $iterator = C.iterator()) { else -> while ($iterator.hasNext()) { val VarDecl = __iterator.next() <... all the statements from Body> } } ```