我正在编写代码,以找到两个整数的最低公共倍数。我首先将代码编写为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为止。首先,我了解到,当我的代码目前正在编写时,它将停止距离实际最低的公共倍数差一个数字。我不担心那个方面,我只是不明白为什么它根本不运行。
我很好奇能不能用另一种循环让它工作。我用循环方法解决了这个问题。这是代码:
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循环不运行,但是循环-do运行。我的语法在while循环中是错误的,还是我不理解它如何运行的基本原则?如能就此问题作出任何澄清,将不胜感激。谢谢!
附注:这是我的第一个问题,我已经参考了指南,但如果你注意到任何我没有遵循的,我也会感谢你的反馈。
发布于 2013-11-10 17:33:25
while循环不运行是因为0 % 4 == 0 (以及0 % 6 == 0),因此第一个条件返回false,循环永远不会执行。
发布于 2013-11-10 17:38:27
它应该是一种或不是一种和操作:
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是false,0%6 != 0也是false,所以它甚至不会进入while循环。
-
因为你想让它持续多久,只要这两个数字都给出了其他的东西,那么剩下的就等于零。使用&&计算器,只要其中一个表达式为真,它就会停止。
从何处开始
此外,我从两个候选人中较大的一个开始,因为它是最低可能的候选人是最低的公共倍数。
https://stackoverflow.com/questions/19892734
复制相似问题