1

2 つの整数の最小公倍数を見つけるコードに取り組んでいます。最初にコードを while ループとして書きましたが、コマンド ラインに値が返されませんでした。while ループは次のとおりです。

def find_common_multiple(x, y)
  z = 0
  while z % x != 0 && z % y != 0 do
    puts z
    z += 1
  end
end

find_common_multiple(4, 6)
=>nil

私が理解しているように、while条件がtrueと評価されなくなるまで、whileループは実行され続けます。まず、私のコードが現在書かれているので、実際の最小公倍数よりも 1 つの数が少ないことを理解しています。私はその側面について心配していません。なぜそれがまったく実行されていないのか理解できません。

別の種類のループを使用して動作させることができるかどうかを知りたいと思っていました。loop-do を使用して問題を解決できました。そのコードは次のとおりです。

def find_common_multiple(x, y)
  z = 0
  loop do
    z += 1
    if z % x === 0 && z % y === 0 
        puts z
    else
        nil
    end
    break if z % x === 0 && z % y === 0
  end

end

find_common_multiple(4, 6)
12
=>nil

while ループは実行されないのに loop-do は実行される理由がわかりません。while ループの構文が間違っていますか、それとも動作の基本原理を理解していませんか? この件に関する明確な説明をいただければ幸いです。ありがとうございました!

psこれは私の最初の質問であり、ガイドラインを参照しましたが、私が従っていないことに気付いた場合は、そのフィードバックもいただければ幸いです。

4

2 に答える 2

1

while ループは実行されません。なぜなら0 % 4 == 0(および0 % 6 == 0) 最初の条件が返さfalseれ、ループが実行されないからです。

于 2013-11-10T17:33:25.530 に答える