You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中Array of Arrays(二维数组)行为异常问题求助

问题:修改二维数组单个元素却导致所有行对应位置都改变?

我来帮你分析下问题所在,以及怎么解决:

首先看你写的这段创建二维数组的代码:

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

这里的问题在于,你创建的arr数组里,每一行都是同一个blankArr的引用。也就是说,arr[0]、arr[1]、arr[2]...其实全指向内存里的同一个一维数组对象。所以当你修改arr[0][0] = 100时,本质上是修改了那个唯一的一维数组的第一个元素,所有行自然都会显示这个变化——因为它们都是在引用同一个数组。

怎么修复?

要让每一行都是独立的数组,你需要在初始化Array的时候,每次都新建一个IntArray,而不是复用同一个对象。把创建数组的代码改成这样:

var arr = Array(nInt) { IntArray(mInt) { 0 } }

或者拆分写得更清晰点:

var arr = Array(nInt) { 
    // 每次循环都生成一个全新的IntArray,保证每行独立
    IntArray(mInt) { 0 } 
}

修复后的效果

当你输入4 4并执行arr[0][0] = 100后,输出就会符合你的预期:

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 

额外说明

这其实是引用类型的典型特性——Kotlin里的数组是引用类型,如果你把同一个对象重复放入数组,所有数组元素都会指向这个对象的内存地址,修改其中一个就会影响所有引用它的地方。不止Kotlin,Java等JVM语言也遵循这个规则哦。

内容的提问来源于stack exchange,提问作者user9686432

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:59:36