2016-07-24 4 views
1

[OK]を、ので、私はRubyで、このJavaをしたい:なぜこのRuby forループは失敗するのですか?

int [] nums = { 2,4,6,8,10 }; 
for (int i = 0; i < nums.length; i++){ 
    nums[i]=nums[i]+100; 
} 

は、私はこれをやっている:

qq.rb:5:in `block in <main>': undefined method `+' for nil:NilClass (NoMethodError) 
     from qq.rb:3:in `each' 
     from qq.rb:3:in `<main>' 

WHY:

nums = Array[2,4,6,8,10]; 
hello = nums.length; 
for i in 0..hello 
    # puts i 
    nums[i]=nums[i] + 100 
end 

コードで失敗しますか?

ご協力いただきありがとうございます。

+0

'i'が間違っている何を語っている必要があります。 – meagar

+0

ありがとうございます。それは..の代わりに.. –

答えて

6

あなたは配列の最後をループしています。

..は、を含み、である。 0..3は数字0, 1, 2, 3を生成する。

...には、範囲内の最後の値が含まれません。 0...30, 1, 2を生成します。あなた本当にが何をしたい、と述べた

は、いくつかの慣用的なルビーです:

nums = [2,4,6,8,10] 
nums.map! { |x| x + 100 } # => [102, 104, 106, 108, 110] 
+0

ありがとう。私はこれが簡単な質問であることを知っていました。うん、私は最終的な価値を見落としていた。 –

+0

熟語ルビは '(2.10).step(2).map&100.method(:+)'となります。 – mudasobwa

+1

@ mudasobwa Err、no。 Rubyのメソッドを1行にできるだけ多く詰め込むという意味で、コードを長く、複雑に、そして遠くに読みにくくしました。それは慣用コードを書く方法ではありません。 – meagar

関連する問題