Qt Creator C++:同一类不同成员函数中二维矩阵结果异常求助
排查二维迷宫生成器矩阵全0问题的几个方向
嘿,我来帮你捋捋这个头疼的问题!明明生成流程看着正常,结果调用setRoomCode时矩阵全是0,这种情况大概率是数据传递、赋值逻辑或者生成过程的隐形错误导致的,我给你列几个常见的排查点:
检查生成函数的返回与赋值逻辑
很多时候问题出在生成函数没有正确把生成好的矩阵传递出来。比如你在生成函数内部新建了一个矩阵并填充了1,但没把这个矩阵赋值回你后续要用的变量,或者错误地覆盖了引用:# 错误示例:生成的矩阵没有传递出来 def generate_maze(rows, cols): # 内部新建矩阵并填充 new_maze = [[0]*cols for _ in range(rows)] # ...生成逻辑,填充1... # 没有返回new_maze,也没有修改外部传入的矩阵 # 调用后,原来的maze还是初始全0 maze = [[0]*cols for _ in range(rows)] generate_maze(rows, cols)解决办法:要么让生成函数返回新矩阵并赋值给你的变量,要么让函数直接修改传入的矩阵(注意利用引用传递的特性,不要在函数内部重新赋值参数变量)。
排查生成后到setRoomCode前的重置操作
有没有可能在生成完成后、调用setRoomCode之前,不小心执行了矩阵重置的代码?比如调试用的临时代码、其他辅助函数里的误操作,把刚生成的矩阵又变回了全0。可以在生成函数结束后、setRoomCode调用前加个临时检查,打印矩阵里1的数量:# 临时检查代码 room_count = sum(row.count(1) for row in maze) print(f"生成完成后,房间数量:{room_count}")如果这里打印是0,那问题根源在生成逻辑;如果是正常数值,那就是后续代码把矩阵重置了。
检查生成算法的执行逻辑
生成流程“看起来正常”不代表实际执行了填充1的逻辑。比如:- 起始点坐标越界,导致生成算法根本没启动;
- 循环条件写错,比如
for i in range(0, 0)这种无效循环,直接跳过了填充步骤; - 填充1的判断条件永远不满足,比如迷宫连通性判断出错,没有任何单元格被标记为房间。
可以在生成逻辑里加几个断点或者打印语句,确认每一步是否真的在给矩阵元素赋值1。
确认矩阵的可修改性与赋值方式
如果你用的是强类型语言,要确认矩阵的类型是否支持修改。比如在Java里,boolean[][]是可以直接修改元素的,但如果是用了不可变的集合类,赋值操作就不会生效;另外要检查赋值语句是否正确,比如是不是把1赋值给了临时变量,而不是矩阵的[i][j]位置。
内容的提问来源于stack exchange,提问作者D-PUNK-R
相关产品推荐
相关产品推荐

