我正在尝试编写一个程序,它接受来自键盘输入的20个数字然后我需要从输入的数字中得到偶数,奇数,正数和负数的计数。我已经写了以下代码
rytest.rb:9:in `block in <main>': undefined method `even?' for
"7":String (NoMethodError)
from rytest.rb:9:in `select'
from rytest.rb:9:in `<main>'
但是我知道这是一个错误的代码。它也会抛出以下错误
<property>
<name>hbase.thrift.support.proxyuser</name>
<value>true</value>
</property>
<property>
<name>hbase.regionserver.thrift.http</name>
<value>true</value>
</property>
我不知道我可能做错了什么,因为我对ruby很新。请帮助我找到一个合适的解决方案。
答案 0 :(得分:2)
这里有三件事错误
even?
方法<=
,您的循环会拉出21个条目,而不是20个条目。数组基于0
,因此< 20
就是您想要的固定代码:
puts "Enter 20 numbers"
numbers = Array.new
while numbers.length < 20
numbers << gets.chomp.to_i
end
puts "You have entered 20 numbers"
h = Hash.new
h["even"] = numbers.select {|x| x.even? && x >= 0}.count
h["odd"] = numbers.select {|x| x.odd? && x > 0}.count
h["positive"] = numbers.select {|x| x > 0}.count
h["negative"] = numbers.select {|x| x < 0}.count
puts h
答案 1 :(得分:1)
您必须在整数实例上调用even?
"1".to_i.even?
示例:
numbers = ["1", "2", "3"]
numbers.map(&:to_i).select(&:even?).select { |i| i > 0 } # => [2]