我正在处理代码以找到两个整数的最低公倍数。我首先将代码编写为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。这是我的第一个问题,我已经引用了这些指南,但如果你注意到我没有遵循这些指南,我也会很感激这些反馈。
答案 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&&
因为只要两个数字都给出其他数字,你就想要它去,然后剩下的就是零。随着&&评估者,一旦表达式成立,它就会停止。
从哪里开始
此外,我从两个候选人中较大的一个开始,因为它是最低的候选人,是最低的普通倍数。