त्रुटि संदेश के साथ उपयोगकर्ता इनपुट मान सही हो गया - रूबी

नीचे मेरा कोड है

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 के लिए 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

संबंधित सवाल
सबसे लोकप्रिय