在我们开始之前,PLZ明白我是红宝石和计算机编程的初学者,我没有先验知识,需要编程是基本的最基本的,否则我无法理解。我目前正在为学校做一个项目而且被困住了。
我必须在ruby中为矩阵A创建一个代码,其中包含n行和n列,并带有值[2,1]
[2,1,0,0,0]
[1,2,1,0,0]
[0,1,2,1,0]
[0,0,1,2,1]
我做了一个代码,但不知道为什么它是错的,在哪里.. plz help !!
def make1d(n)
a = Array.new(n)
for i in 0..(n-1)
a[i] = 0
end
a
end
def make2d(height,width)
a = Array.new(height)
for i in 0..(height-1)
a[i] = make1d(width)
end
a
end
def matrixa(n)
a=make2d(n,n)
for k in 0..n-2
a[k][k]=2
a[k+1][k]=1
a[k][k+1]=1
a[n-1][n-1]=2
end
a
end
答案 0 :(得分:1)
Ruby有一些你可以利用的强大功能。例如,Array.new
使用块(do ... end
)来指定默认值。此块将当前索引作为参数(do |index| ... end
)。适合这种情况!
对于仅在对角线上设置值,您的逻辑似乎相当复杂。如果你退后一步,如果只查看行和列索引,对角线的特殊之处是什么?对,他们是平等的。如果您向右/向左移动一个对角线,则所有行和列索引都会被一个关闭,依此类推。
所以这就是我编写代码的方式:
Array.new(n) do |row|
Array.new(n) do |col|
case row - col
when -1 then 1
when 0 then 2
when 1 then 1
else 0
end
end
end
或者你可以让它更短,并处理一般情况。只需用您想要的值替换2
,或将其设为函数参数
Array.new(n) do |row|
Array.new(n) do |col|
[2 - (row - col).abs, 0].max
end
end