2016-07-24 117 views
1

好了,我只是想在Ruby中做到這一點的Java:爲什麼Ruby for循環失敗?

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

我這樣做:

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

代碼失敗:

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>' 

爲什麼?

在此先感謝您的幫助。

+0

的'把i'應該告訴你什麼是錯的。 – meagar

+0

謝謝。這是...而不是.. –

回答

6

您正在循環播放數組的末尾。

..包括0..3產生數字0, 1, 2, 3

你想要...它不包括範圍內的最後一個值。 0...3產生0, 1, 2

這就是說,你真的一些慣用的紅寶石:

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

非常感謝。我知道這是一個簡單的問題。是的,我忽略了最終的價值。 –

+0

習慣性ruby將是'(2..10).step(2).map&100.method(:+)'。 – mudasobwa

+1

@mudasobwa Err,no。以更多的Ruby方法爲代價,你可以使代碼更長,更復雜,並且可讀性更差。這不是你寫慣用代碼的方式。 – meagar