Ruby参数错误,尝试将矩阵转置90度
在下面的代码中,我试图将矩阵变换90度。但是当我运行代码时,我得到一个参数错误: 我不明白为什么会发生这种情况,因为我在方法定义中显然有一个参数。如果您能提供任何有关此错误发生原因的信息,我将不胜感激。谢谢Ruby参数错误,尝试将矩阵转置90度,ruby,argument-error,Ruby,Argument Error,在下面的代码中,我试图将矩阵变换90度。但是当我运行代码时,我得到一个参数错误: 我不明白为什么会发生这种情况,因为我在方法定义中显然有一个参数。如果您能提供任何有关此错误发生原因的信息,我将不胜感激。谢谢 irb(main):001:0> matrix1 = [ irb(main):002:1* [1, 5, 8], irb(main):003:1* [4, 7, 2], irb(main):004:1* [3, 9, 6] irb(main):005:1> ] =&g
irb(main):001:0> matrix1 = [
irb(main):002:1* [1, 5, 8],
irb(main):003:1* [4, 7, 2],
irb(main):004:1* [3, 9, 6]
irb(main):005:1> ]
=> [[1, 5, 8], [4, 7, 2], [3, 9, 6]]
irb(main):006:0> def rotate90(matrix_input)
irb(main):007:1> input_column = 0
irb(main):008:1> input_row = 0
irb(main):009:1> return_column = matrix_input.size - 1
irb(main):010:1> matrix2 = []
irb(main):011:1> mat1_size = matrix_input.size -1
irb(main):012:1> loop do
irb(main):013:2* loop do
irb(main):014:3* matrix2[input_column][return_column] = matrix_input[input_row][input_column]
irb(main):015:3> input_column += 1
irb(main):016:3> break if input_column >= matrix_input[0].size - 1
irb(main):017:3> end
irb(main):018:2> input_row += 1
irb(main):019:2> input_column = 0
irb(main):020:2> return_column -= 1
irb(main):021:2> break if input_row >= mat1_size
irb(main):022:2> end
irb(main):023:1> matrix2
irb(main):024:1> end
=> :rotate90
irb(main):025:0> rotate90(matrix1)
ArgumentError: wrong number of arguments (given 1, expected 0)
from (irb):11:in `length'
from (irb):11:in `rotate90'
from (irb):25
from /usr/bin/irb:11:in `<main>'
如果我正确理解了您想要完成的任务,那么可以按如下方式完成
def rotate90(arr)
arr.map(&:reverse).transpose
end
注意
arr.map(&:reverse)
#=> [[8, 5, 1],
# [2, 7, 4],
# [6, 9, 3]]
arr.map&:reverse大致是
arr.map { |a| a.reverse }
还请注意
4.times.reduce(arr) { |a,_| rotate90(a) }
#=> [[1, 5, 8],
# [4, 7, 2],
# [3, 9, 6]]
返回原始数组
我从评论中看到OP忘记提到Arraytranspose或Arrayreverse都不能使用。在这种情况下,我们可以采取不同的方法
请注意,如果arr_new是正在构造的阵列,则:
arr_new[i][j] = arr[arr.size-1-j][i]
对于所有0,您的错误答案如下:
mat1_size = matrix_input.size -1
-1是负数,Ruby将其解释为:
mat1_size = matrix_input.size(-1)
解决办法当然是:
mat1_size = matrix_input.size - 1
然而,您的程序仍然存在一些错误,但这是您最初问题的答案。什么是作为rotate90的参数传递的。抱歉-我使用的是这个矩阵:matrix1=[[1,5,8],[4,7,2],[3,9,6]]rotate90matrix1的期望返回值是多少,在您的注释中给出了matrix1?您应该通过编辑将注释和所需的返回值合并到问题中。错误消息表示,在代码中的某个点,您正在向不需要参数的方法传递参数。错误消息还会告诉您发生这种情况的确切位置。由于您没有告诉我们发生错误的确切位置,所以我们只能说这个问题。特别是,错误消息指向第7行,这显然不是错误所在的位置,而第26行甚至不存在。因此,您发布的错误消息似乎不属于您发布的代码,因为它指向您发布的代码中甚至不存在的行。只要我们甚至没有匹配的错误消息和代码,我们就绝对无法为您提供帮助。应该提到的是,该练习禁止使用.transpose和.reverseThanks,我自己永远不会想到这一点。我能够修复所有其他错误。
mat1_size = matrix_input.size -1
mat1_size = matrix_input.size(-1)
mat1_size = matrix_input.size - 1