2

Rubyプログラミング初心者です。私のプログラムは、特定の文字列内の偶数長の単語の数です。しかし、それは次のエラーを示しています

[0, 0] の未定義のメソッド '<' :配列

これが私のコードです

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

4 に答える 4

4

あなたの問題はここにあると思います

i = 0, m = 0

成功する

i = 0
m = 0

編集:

また、カイ・ケーニッヒが言ったように、そのように呼ぶと、

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

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

于 2012-07-16T07:34:05.850 に答える
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
于 2012-07-16T07:57:44.873 に答える
1

他の人は、あなたのコードの直接のエラーが何であるかをすでに説明しています。しかし、より大きな問題は、コードが慣用的な Ruby コードではないということです。

慣用的なコードは次のようになります。

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

そして、ご覧のとおり、自分が犯したような間違いを犯す可能性はまったくありません。

于 2012-07-16T15:12:55.147 に答える
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
于 2012-07-16T07:39:58.250 に答える