Ruby 而循环vs循环是
我正在编写代码,寻找两个整数的最小公倍数。我首先以while循环的形式编写代码,它不会向命令行返回任何值。以下是while循环:Ruby 而循环vs循环是,ruby,loops,while-loop,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条件不再被评估
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循环不运行,但是循环运行。是我在while循环中的语法错误,还是我不理解它如何运行的基本原理?对此问题的任何澄清都将不胜感激。谢谢大家!
p、 这是我的第一个问题,我已经参考了指导原则,但是如果您注意到我没有遵循的任何指导原则,我也会感谢您的反馈。while循环没有运行,因为
0%4==0
(以及0%6==0
)因此,第一个条件返回false
,循环永远不会执行。while循环不会运行,因为0%4==0
(以及0%6==0
),所以第一个条件返回false
,循环永远不会执行。它应该是and操作还是非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也是false,因此它甚至不会进入while循环
为什么| |,而不是&
因为你想让它持续,只要这两个数字都给出了其他值,那么余数为零。使用&&evaluator,只要其中一个表达式为真,它就会停止
从何处开始
另外,我从两个候选者中的较大者开始,因为它可能是最低公倍数的最低候选者。它应该是一个或不是一个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也是false,因此它甚至不会进入while循环
为什么| |,而不是&
因为你想让它持续,只要这两个数字都给出了其他值,那么余数为零。使用&&evaluator,只要其中一个表达式为真,它就会停止
从何处开始
另外,我从两个候选者中的较大者开始,因为它是最低可能的候选者,是最低的公倍数。没有理由在这里使用
===
,==
会很好(而且更有意义)。没有理由在这里使用===
,=
会很好(而且更有意义)@AndrewMarshall-没错,条件是z%x!=0
,如果z==0
正确,则条件总是false
。最重要的是,当OP想要得到LCM时,用0
开始循环是没有意义的。谢谢你的回答,这现在完全有意义了。@AndrewMarshall-没错,还有co条件是z%x!=0
,如果z==0
正确,它总是false
。最重要的是,当OP想要得到LCM时,用0
开始循环是没有意义的。谢谢你的回答,这现在完全有意义了。这也是一个很好的观点。谢谢!我希望我也能检查你的答案或者至少投赞成票,但不幸的是,我还没有足够高的声誉去投赞成票。这也是一个好观点。谢谢!我希望我也能检查你的答案,或者至少投赞成票,但不幸的是,我还没有足够高的声誉去投赞成票。