以下是我的代码
a = Array.new(10, 0)
(1..5).each do |t|
a[gets.to_i] += 1
end
(0..10).each do |i|
(1..a[i]).each do |j|
if j>0
puts i
end
end
end
当我输入5 3 2 2 8时,返回值为2 2 3 5 8。 但是我收到了一些错误
practice.rb:8:in `block in <top (required)>': bad value for range(ArgumentError)
from /practice.rb:7:in `each'
from /practice.rb:7:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'
答案 0 :(得分:1)
问题是,范围..
运算符包含范围中的最后一个值,因此在您的情况下:
(0..10).to_a
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
在最后一个循环中,您要求(1..a[10])
的范围,因为a
是基于零的索引,10是nil
所以(1..nil)
失败。
相反,您可以在范围内使用...
,这样可以省略最后一个值,如下所示:
(0...10).to_a
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
因此,您可以更改此循环的顶部,它将按预期工作。
(0...10).each do |i|
..
end