2016-07-24 7 views
1

Ok, so will ich ihn nur Java in Ruby tun:Warum schlägt diese Ruby for-Schleife fehl?

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

-Code nicht mit:

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

WARUM

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

ich das tue?

Vielen Dank im Voraus für Ihre Hilfe.

+0

Die 'legt I' Sie gesagt haben sollte, was falsch ist. – meagar

+0

Danke. Es war ... statt .. –

Antwort

6

Sie durchlaufen das Ende des Arrays.

.. ist einschließlich. 0..3 produziert die Nummern 0, 1, 2, 3.

Sie möchten ..., die den letzten Wert im Bereich nicht enthält. 0...3 produziert 0, 1, 2.

Das heißt, was Sie wirklich wollen, ist einige idiomatische Ruby-:

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

Vielen Dank. Ich wusste, dass das eine einfache Frage war. Ja, ich habe den endgültigen Wert übersehen. –

+0

Idiomatischer Rubin wäre '(2..10) .Schritt (2) .Map & 100.Methode (: +)'. – mudasobwa

+1

@mudasobwa Err, nein. Sie haben den Code länger, komplexer und * weit * weniger lesbar gemacht, um so viele Ruby-Methoden wie möglich in eine Zeile zu packen. So schreibst du keinen idiomatischen Code. – meagar