首页 > 解决方案 > 科特林。数组数组无法正常工作

问题描述

fun main(args: Array<String>) {
    val (n, m) = readLine()!!.trim().split(' ')
    val nInt = n.toInt()
    val mInt = m.toInt()
    val blankArr = IntArray(mInt, { _ -> 0 } )
    var arr = Array(nInt, { _ -> blankArr })
    for (a in arr) {
        for (b in a)
            print(b.toString() + ' ')
        println()
    }
    arr[0][0] = 100
    for (a in arr) {
        for (b in a)
            print(b.toString() + ' ')
        println()
    }
}

安慰:

4 4
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
100 0 0 0 
100 0 0 0 
100 0 0 0 
100 0 0 0 

我究竟做错了什么?

在 [0,0] 中应该是 100。取而代之的是一整列填充了 100

标签: arrayskotlin

解决方案


尝试更换

val blankArr = IntArray(mInt, { _ -> 0 } )
var arr = Array(nInt, { _ -> blankArr })

val blankArr = { IntArray(mInt) { _ -> 0 } }
var arr = Array(nInt, { _ -> blankArr() })

或者

val blankArr = IntArray(mInt) { _ -> 0 }
var arr = Array(nInt, { _ -> blankArr.copyOf() })

执行结果会变成

4 4
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
100 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0 

您问:

我究竟做错了什么?

您的二维数组实际上是“一个元素都指向同一个数组的数组”。
因此,复制原始数组将解决您的问题。


推荐阅读