【问题标题】:I am getting the val cannot be reassigned compile time error. But I have declared the variable as `var` only我得到 val 无法重新分配编译时错误。但我只将变量声明为`var`
【发布时间】:2018-02-27 12:33:06
【问题描述】:

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

【问题讨论】:

  • 你不需要手动增加i或在for循环中手动设置i
  • 你不需要声明 var i : Int = 1 因为它会在循环中为你声明。你也不需要循环内的 i = i+1 。

标签: kotlin


【解决方案1】:

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(均描述为@987654321)构建进度,以相反的方向迭代或使用非单元步骤@。

【讨论】:

  • 你离开了构建破坏i = i + 1
  • 感谢您的解释。我不会再次遇到同样的错误吗? Bcoz,我们再次在 for 中增加 i 的值。所以我也必须删除该声明。如果是这样,我的第二个问题是如何在for 循环中减少或执行i = i + 2
  • 谢谢@hotkey。工作正常
【解决方案2】:
var i : Int = 1
for (i in 1..3){
  nos[i] = scanner.nextInt()
  i = i+1
}

在这段代码中,您声明的不是一个,而是两个名为 i 的变量,因为 for 标头创建了自己的声明。在循环中,只有for 标头中声明的版本是可见的,并且根据定义,该版本是val

话虽如此,但我不清楚您想要实现什么,因为一切看起来都可以按照您想要的方式工作,而无需尝试在循环中更新 i

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多