arrays - 科特林。数组数组无法正常工作
问题描述
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
解决方案
尝试更换
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
您问:
我究竟做错了什么?
您的二维数组实际上是“一个元素都指向同一个数组的数组”。
因此,复制原始数组将解决您的问题。
推荐阅读
- spring - Spring Boot Error 控制器的不明确处理程序错误
- c++ - 循环输出中的平方数
- amazon-web-services - 如何在使用 ssh 连接时运行 localhost 地址
- json - 如何解析存储在 shell 变量中的 json 值
- javascript - React:这个番茄钟如何通过“freecodecamp 测试 12 和 13”?
- python - 如何从一个目录中读取多个文本文件,将它们全部转换为excel文件
- powershell - 使用powershell从excel中提取数据
- python - 在 Python 脚本中执行 SQL 存储过程
- javascript - 使用 useContext 时,数据首先加载为空数组,当我应用 .map() 或 .find() 时,我收到一条错误消息
- angular - 答案没有从问题组件传递到测验组件