甚至未定义? ruby代码中的方法

时间:2016-02-18 10:18:14

标签: ruby

我正在尝试编写一个程序,它接受来自键盘输入的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很新。请帮助我找到一个合适的解决方案。

2 个答案:

答案 0 :(得分:2)

这里有三件事错误

  1. 正如其他人所评论的那样,您在一个不存在的字符串上调用方法。 &#34;获取&#34;意味着&#34;得到字符串&#34;,而字符串没有even?方法
  2. 由于<=,您的循环会拉出21个条目,而不是20个条目。数组基于0,因此< 20就是您想要的
  3. 0 is even,但您的代码会跳过它
  4. 固定代码:

    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]