while循环vs loop-do

时间:2013-11-10 17:29:17

标签: ruby loops while-loop

我正在处理代码以找到两个整数的最低公倍数。我首先将代码编写为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循环中是错误的还是我不理解它如何运作的基本原理?对此主题的任何澄清将不胜感激。谢谢!

P.S。这是我的第一个问题,我已经引用了这些指南,但如果你注意到我没有遵循这些指南,我也会很感激这些反馈。

2 个答案:

答案 0 :(得分:1)

while循环不会运行,因为0 % 4 == 0(以及0 % 6 == 0)因此第一个条件返回false并且循环永远不会执行。

答案 1 :(得分: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

为您解决的原因:

你从零开始。 0%4!= 0为假,0%6!= 0也为假,因此它甚至不会进入while循环。

为什么||,NOT&&

因为只要两个数字都给出其他数字,你就想要它去,然后剩下的就是零。随着&&评估者,一旦表达式成立,它就会停止。

从哪里开始

此外,我从两个候选人中较大的一个开始,因为它是最低的候选人,是最低的普通倍数。