我得到的val无法重新分配编译时错误。但我只将变量声明为`var`

时间:2018-02-27 12:33:07

标签: kotlin

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")
}

2 个答案:

答案 0 :(得分:4)

for (i in 1..3) ...语句重新定义了i其正文范围,它变为val(它实际上是一个隐藏i的单独变量在循环之外宣布。)

您可以使用这些变量的不同名称来修复代码,或者在您的情况下,只需删除var i: Int = 1i = 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 (回复评论):您可以通过构建功能downTostep的进度来反向或使用非单位步骤进行迭代,两者都描述了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