Kotlin使用ArrayList实现二维数组逻辑错误:井字棋输入位置后整列显示X
问题根因
你确实猜对了,问题出在棋盘ArrayList的初始化逻辑:
board.add(row)代码的位置放错了,你把它放在了内层j循环内部,导致每创建一个行对象,就会往board中重复添加3次同一个行引用- 最终board的前3个元素(printBoard函数遍历的就是前3个元素)都是第一个外层循环创建的同一个row对象的引用,所以你修改任意一行的某一列位置,本质上都是修改同一个行对象的对应位置,表现出来就是整列都变成了X
- 额外小问题:打印坐标的代码把y的输出写错成了x,还有
continueGame一直为true,游戏不会自动结束,属于后续可优化的点
修正方案
仅调整初始化部分的代码位置即可解决核心问题:
var board = arrayListOf<ArrayList<String>>() fun main(args: Array<String>) { for (i in 0..2){ val row = arrayListOf<String>() for (j in 0..2){ row.add("") } // 内层循环填充完一行的3个空位后,再加到board中,每行只加一次 board.add(row) } // 后续逻辑保持不变,可把打印坐标的代码println("x is $y")改成println("y is $y")修正提示错误
内容的提问来源于stack exchange,提问作者Set GFX
相关产品推荐
相关产品推荐

