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

标签 kotlin

val 无法重新分配编译时错误 var 变量。我们不能改变数组值吗?

错误

Array.kt:11:3: error: val cannot be reassigned

代码:

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

最佳答案

for (i in 1..3) ... 语句重新定义了 i 的主体范围,它成为一个 val code> (它实际上是一个单独的变量,遮蔽了循环外部声明的 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(回答评论):您可以通过使用函数 downTo 构建级数,以相反方向迭代或使用非单位步骤。步骤,均描述here in the reference .

关于kotlin - 我收到 val 无法重新分配编译时错误。但我只将变量声明为 `var`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49008821/

相关文章:

android - 为什么kotlin中只有val类型的对象才有组件函数?

kotlin - Unweave 序列,Kotlin 函数式/流式习语

android - 在 RecyclerView 中单击项目后,不确定在哪里实现 parcelable ArrayList

Android 3.6 ViewStubProxy 未解析引用

Kotlin 中的 Android 房间错误

multithreading - 为什么Executor.asCoroutineDispatcher不能像newFixedThreadPoolContext一样工作?

android - 如何在 Splashscreen API 中删除我的启动画面图标周围的圆形 mask ?

android - Android Studio 生成的代码不显示正确命名的变量

java - 用DSL KStream向KTable转换的Kafka墓碑

kotlin - 在 Kotlin 中扩展具有不同签名的 2 个 lambda