目标是让用户输入3个单独的数字并让脚本将其存储在哈希中,输出值,然后在哈希中添加所有数字。我正在处理的脚本不断出错,我希望能就如何纠正它提供一些指导。
#!/user/bin/ruby
userhash=Hash.new()
puts "Enter first number"
userhash=[:num1=>gets.chomp]
puts "Enter second number"
userhash=[:num2=>gets.chomp]
puts "Enter third number"
userhash=[:num3=>gets.chomp]
puts "The numbers entered were"
userhash.each_value {|value| puts value}
puts "the sum is #{userhash.inject(:+)}"
我刚刚完成了这个作为一个没有问题的数组,并认为将它作为一个哈希非常相似。显然它没有按预期工作。感谢帮助。
Error: rb:15:in '<main>': undefined method 'each_value' for [{:num3=>"3"}]:Array (NoMethodError)
我在提示测试时输入了值1,2,3。
UDPATE:Orde的方法帮助我开始工作
#!/user/bin/ruby
userhash=Hash.new()
puts "Enter first number"
userhash[:num1]=gets.chomp.to_f
puts "Enter 2nd number"
userhash[:num2]=gets.chomp.to_f
puts "Enter 3rd number"
userhash[:num3]=gets.chomp.to_f
puts "The number you entered were "
userhash.each_value {|value| puts value}
puts "The sum of those number is #{userhash.each_value.inject(:+)}"
答案 0 :(得分:0)
您反复重新分配到userhash
并指定一个数组(例如[:num1=>gets.chomp]
)。由于Array
没有each_value
方法,因此会抛出undefined method
。
userhash=Hash.new()
puts userhash.class #=> Hash
puts "Enter first number"
userhash=[:num1=>gets.chomp]
puts userhash.class #=> Array
要将值与键相关联,element assignment语法为hash_name[key] = value
:
userhash=Hash.new()
puts "Enter first number"
userhash[:num1] = gets.chomp
puts "The numbers entered were"
userhash.each_value {|value| puts value}
puts userhash.class #=> Hash
答案 1 :(得分:0)
此代码中存在很多错误。这是一个重构版本:
# Declare an empty hash with the { } notation
entries = { }
# Request input N times
(1..3).each do |n|
puts "Enter number %d" % n
# Add this entry to the hash, convert it to an integer with to_i
entries[:"num#{n}"] = gets.chomp.to_i
end
# Add the numbers together and have a default of 0 in case the array
# is empty.
puts "the sum is %d" % entries.values.inject(0, :+)
您的原始代码将userhash
变量重新定义为带有散列的数组。这个新代码将事物组织成一个包含多个条目的哈希,但考虑到它的使用方式,这并不是必需的。相反,你可以这样做:
sum = 0
(1..3).each do |n|
puts "Enter number %d" % n
sum += gets.chomp.to_i
end
puts "the sum is %d" % sum