val
无法重新分配编译时错误var
变量。我们不能改变数组值吗?
错误
Array.kt:11:3:错误:val无法重新分配
代码:
import java.util.Scanner
fun main(args: Array< String>){
println("Enter the no")
val scanner = Scanner(System.`in`)
var nos = Array<Int>(5){0}
var i : Int = 1
for (i in 1..3){
nos[i] = scanner.nextInt()
i = i+1
}
println("Given values $nos")
}
答案 0 :(得分:4)
for (i in 1..3) ...
语句重新定义了i
其正文范围,它变为val
(它实际上是一个隐藏i
的单独变量在循环之外宣布。)
您可以使用这些变量的不同名称来修复代码,或者在您的情况下,只需删除var i: Int = 1
和i = i + 1
:
val scanner = Scanner(System.`in`)
var nos = Array<Int>(5) { 0 }
for (i in 1..3) {
nos[i] = scanner.nextInt()
}
println("Given values $nos")
UPD (回复评论):您可以通过构建功能downTo
和step
的进度来反向或使用非单位步骤进行迭代,两者都描述了here in the reference。
答案 1 :(得分:3)
var i : Int = 1
for (i in 1..3){
nos[i] = scanner.nextInt()
i = i+1
}
在此代码中,您声明的不是一个,而是两个名为i
的变量,因为for
标头创建了自己的声明。在循环内,只有for
标题中声明的版本可见,并且根据定义,该版本为val
。
话虽如此,我还不清楚你想要实现什么,因为一切看起来都会像你想要的那样工作,而不试图在循环中更新i
。