【发布时间】:2011-04-13 16:37:22
【问题描述】:
我有一个这样的数组
[["1"], ["2","3"]]
一开始我有这个算法
maxarray = []
i = 0
m = array.count
while i < m do
x = 0
s = array[i].count
while x < s do
maxarray[i][x] = (Integer(array[i][x]) + [Integer(maxarray[i-1][x-1]), Integer(maxarray[i-1][x])].max)
x+=1
end
i+=1
end
错误是这样的:
`<main>': undefined method `[]' for nil:NilClass (NoMethodError)
所以我认为数组索引可能出错了所以我扩展了我的算法
maxarray = []
i = 0
m = array.count
while i < m do
x = 0
s = array[i].count
while x < s do
if i-1 < 0
item2 = 0
elsif i-1 < 0 && x-1 < 0
item1 = 0
else item1 = maxarray[i-1][x-1]
item2 = maxarray[i-1][x]
end
maxarray[i][x] = (Integer(array[i][x]) + [Integer(item1), Integer(item2)].max)
x+=1
end
i+=1
end
但现在我有一个不同的错误:
`Integer': can't convert nil into Integer (TypeError)
如何防止这个错误并运行脚本?
【问题讨论】:
-
为什么不使用:
maxarray.each do |cur_x| (do_something) end你这里没有使用 Ruby 的力量 :) -
也许你可以解释你正在尝试做什么而不是给出你当前的解决方案......
-
@Chris McCauley 就在中间
maxarray = (Integer(array[i][x]) + [Integer(item1), Integer(item2)].max):) -
是的,使用
each而不是糟糕地重新实现它。不,不要从[]切换到Array.new。 @Mikee:克里斯要求解释,而不是复制/粘贴。 -
如果您能描述问题的最佳方式是说您想要一些“充满数据”的东西,我无法帮助您。这令人担忧,因为有效沟通是程序员的一项基本技能。
标签: ruby arrays multidimensional-array