未定义的方法'&lt;' for [0,0]:Array <nomethoderror> </nomethoderror>

时间:2012-07-16 07:29:38

标签: ruby-on-rails ruby

我是Ruby编程的初学者。我的程序是给定字符串中单词长度的计数。但它显示以下错误

未定义的方法'&lt;' for [0,0]:Array

这是我的代码

def even(words, n)
   i = 0, m = 0
   while i < n do
       count = count + words[i].length
       if count%2 == 0 then
          m = m + 1
       end
       i = i + 1
  end
  return m
end
prinnt "Enter The String:"
s = gets.chomp
words = s.split()
n = words.length
x = even(words, n)
puts x

4 个答案:

答案 0 :(得分:4)

我认为你的问题在这里

i = 0, m = 0

制作

i = 0
m = 0

编辑:

也像KaiKönig所说,如果你这样称呼它意味着

" now's  the time".split        #=> ["now's", "the", "time"]

http://ruby-doc.org/core-1.9.3/String.html#method-i-split

答案 1 :(得分:1)

我是这样做的:

'this is a string'.split.select{ |w| w.size % 2 == 0 }.size # => 3

申请gets

gets.chomp.split.select{ |w| w.length % 2 == 0 }.size

答案 2 :(得分:1)

其他人已经向您解释了代码中立即错误的内容。但是,更大的问题是你的代码不是惯用的Ruby代码。

惯用语代码看起来像这样:

puts gets.split.map(&:length).count(&:even?)

而且,正如你所看到的那样,你根本无法犯甚至犯错误,例如你所犯的错误。

答案 3 :(得分:0)

试试吧

 def even(words, n)
     i = 0
     m = 0
     count = 0
      while i < n do
        count = count + words[i].length
        if count%2 == 0 then m = m + 1 end
        i = i + 1
      end
      return m
      end
      print "Enter The String:"
      s = gets.chomp
      words = s.split("")
      n =  words.length
      #p n 
      x = even(words, n)
      puts x