2016-07-24 71 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