Lua方阵乘法器计算异常求助:循环结束后结果值错误
方阵乘法器结果矩阵取值错误排查
问题根源
你代码里创建结果矩阵C的时候踩了Lua表引用的坑:所有行都用了同一个Model表。Lua里表是引用类型,多次执行table.insert(C, Model)后,C的每一行其实都是指向同一个表的指针。改其中一行的元素,所有行的对应位置都会跟着变,最后所有行的结果全被最后一次计算的值覆盖了。
修正后的代码
function Matrix_Multiplicator_Square(A,B) if not(#A == #B) then error("Hey! The matrix is not square.") end local C = {} -- 给每一行单独建新表,不再复用同一个Model for l=1,#A,1 do local row = {} for k=1,#A,1 do table.insert(row, 0) end table.insert(C, row) end for y=1,#A,1 do for x=1,#A,1 do for i=1,#A,1 do C[x][y] = C[x][y] + A[x][i]*B[i][y] end print(C[x][y]) end end print(" -- ",#A) for y=1,#A,1 do for x=1,#A,1 do print(C[x][y]) end end return C end
修改说明
- 删掉了原来的
Model表,改成在循环里为每一行生成全新的空表并填充0,确保每一行都是独立的,互相不会干扰。 - 乘法计算的逻辑没动,是正确的。
效果验证
拿2阶矩阵测试,比如:
local A = {{1,2}, {3,4}} local B = {{5,6}, {7,8}}
修正后运行,第一次循环打印的7、22、10、32是正确结果,后续遍历矩阵C时会输出同样的数值,不会再出现所有行值相同的错误。
内容的提问来源于stack exchange,提问作者LuizFernando
相关产品推荐
相关产品推荐

