2017-01-19 12 views
0

ルビーの学習を始めたばかりで、変数が定義されている場所がどこかでわかりません。たとえば、なぜこのコードの動作を行います。ルビコードで変数を定義する場所のニュアンス

def two_sum(nums) 
    result = nil 
    i = 0 
    while i < nums.length 
    k = (nums.length - 1) 
    if nums[i] + nums[k] == 0 
     result = [i,k] 
    end 
    i += 1 
    k -= 1 
    end 
    return result 
end 

そして、なぜこのコードは動作しません。

def two_sum(nums) 
    result = nil 
    i = 0 
    k = (nums.length - 1) 
    while i < nums.length 
    if nums[i] + nums[k] == 0 
     result = [i,k] 
    end 
    i += 1 
    k -= 1 
    end 
    return result 
end 

は、事前にありがとうございます!

+5

この質問は、あなたが「動かない」対「仕事」はあなたに何を意味するのかが定義されていれば答えることが容易になるだろう。あなたはどんな結果を期待しましたか?代わりに何を見ましたか(エラー、クラッシュ、予期しない値)? – Jonah

答えて

1

私はkは常に(nums.length - 1)ある場合は、各反復の開始時に、それを再割り当てするので、あなたはコードだけで、上記の値をバグ

while i < nums.length 
    k = (nums.length - 1) 
    ... 
    k -= 1 # this statement has no effect! 
end 

を持っているかもしれないと思います。他のステートメントは効果がありません。

k = (nums.length - 1) 
while i < nums.length 
    ... 
    k -= 1 
end 

上方には、最初の反復で(nums.length - 1)k開始の値と、各反復のため1によって低減されます。

プロティップ -

それはRubyでfor/while/untilループを使用することは非常に珍しいです。すべての要素がeachまたはeach_with_indexを使用する上で、あなたがループしたい場合は代わりに

array.each { |each| ... } 
array.each_with_index { |each, n| ... } 
関連する問題