使用错误消息对用户输入值进行排序

时间:2016-03-28 17:41:37

标签: ruby

以下是我的代码

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>'

1 个答案:

答案 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