在我的“编程范例”课程中,大家好,我们才刚刚开始学习如何用ruby编程。一项练习要求实现一个将两个矩阵相乘的函数。
通常使用Java,我尝试过考虑制作三个二维数组,这就是我尝试对两个矩阵2x2实现它的方法:
def matrixmultiplicator(first_matrix, second_matrix)
result_matrix = [][]
first_matrix.each_index do |i|
second_matrix[i].each_index do |j|
sum = 0
//This loop range is just a test for two 2x2 matrices
(0..1).each do |k|
sum = sum +(first_matrix[i][j+k] * second_matrix[j+k][i])
end
result_matrix[i][j] = sum
end
end
end
matrixmultiplicator([[1, 2], [3, 4]], [[2, 3], [3, 3]])
不幸的是,我收到这个错误: 参数数量错误(给定0,应为1..2)(ArgumentError)
有人可以帮我吗? 预先谢谢你
答案 0 :(得分:0)
这不符合您的预期:
result_matrix = [][]
试图在空数组上调用“数组索引方法”([]
),但没有将任何参数传递给[]
方法。运算符只是Ruby中带有某种语法糖的方法,因此[][]
大致等同于:
empty_array = []
empty_array.[]()
其中.[]
是对[]
方法的调用(就像obj.m
是对m
方法的调用),而()
是一个空参数列表。
Ruby(像大多数语言一样)不具有多维数组,它具有数组数组,因此您可以在第一次需要它们时创建内部数组:
result_matrix = [ ]
#...
result_matrix[i] ||= [ ]
result_matrix[i][j] = sum
代替
result_matrix[i][j] = sum
或者您可以预填充result_matrix
:
result_matrix = Array.new(2) { [ ] }
请参见Array constructor docs,以了解Array.new
调用的情况。