1

我正在编写代码以找到两个整数的最小公倍数。我首先将代码编写为 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 循环将继续运行,直到 while 条件不再被评估为 true。首先,我明白,由于我的代码目前是编写的,它会停止实际最低公倍数的一个数字。我并不担心这方面,我只是不明白为什么它根本没有运行。

我很想知道是否可以使用另一种类型的循环使其工作。使用 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 回答
0

它应该是 OR 而不是 AND 操作:

def find_common_multiple(x, y)
  z = x > y  ?  x : y
  puts "#{z} ist the bigger of the two and the lowest possible candidate to be the lowest common multiple"
  while z % x != 0 || z % y != 0 do
    z += 1
  end
  puts z
end

它对您不起作用的原因:

You'ew 从零开始。0 % 4 != 0 是假的, 0 % 6 != 0 也是假的,所以它甚至不会进入while循环。

为什么||,而不是&&

因为只要两个数字都给出其他数字,然后余数为零,您就希望它持续下去。使用 && 求值器,只要其中一个表达式为真,它就会停止。

从哪里开始

我也从两个候选者中较大的一个开始,因为它是最低公倍数的最低候选者。

于 2013-11-10T17:38:27.540 回答