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

Kotlin二维列表替换元素异常:修改单个元素致全列表变更

问题根源

你现在的代码里,所有行的子列表其实都是同一个MutableList实例。因为初始化循环里printS.add(printS[0])只是把第一个子列表的引用重复添加到外层列表中,并没有创建新的独立列表。所以修改任意一行的元素,其他行都会跟着变化——它们本质上是同一个列表的不同引用而已。

修复代码

把初始化子列表的逻辑改成每次创建新的MutableList,而不是复用第一个列表的引用:

方案一:基于第一个列表创建副本

private val printS: MutableList<MutableList<Char>> = mutableListOf(mutableListOf())

// 初始化第一个子列表
for (i in 1..seat) printS[0].add('S')

// 每次添加时创建新的副本,而非复用引用
for (i in 1..row) {
    printS.add(printS[0].toMutableList())
}

方案二:直接初始化每个子列表(更直观)

如果不想依赖第一个列表的副本,也可以直接循环创建每个子列表:

private val printS: MutableList<MutableList<Char>> = mutableListOf()

// 直接创建每一行的子列表
for (i in 1..row + 1) { // 对应原代码的总行数:初始1行 + 循环添加row行
    val rowList = mutableListOf<Char>()
    for (j in 1..seat) {
        rowList.add('S')
    }
    printS.add(rowList)
}

这样修改后,执行printS[5][5] = 'B'就只会修改第6行第5列的元素,其他行不会受到影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:33:01