首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环与循环

循环与循环
EN

Stack Overflow用户
提问于 2013-11-10 17:29:16
回答 2查看 335关注 0票数 1

我正在编写代码,以找到两个整数的最低公共倍数。我首先将代码编写为while循环,它不会向命令行返回任何值。下面是while循环:

代码语言:javascript
复制
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为止。首先,我了解到,当我的代码目前正在编写时,它将停止距离实际最低的公共倍数差一个数字。我不担心那个方面,我只是不明白为什么它根本不运行。

我很好奇能不能用另一种循环让它工作。我用循环方法解决了这个问题。这是代码:

代码语言:javascript
复制
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循环中是错误的,还是我不理解它如何运行的基本原则?如能就此问题作出任何澄清,将不胜感激。谢谢!

附注:这是我的第一个问题,我已经参考了指南,但如果你注意到任何我没有遵循的,我也会感谢你的反馈。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-10 17:33:25

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

票数 1
EN

Stack Overflow用户

发布于 2013-11-10 17:38:27

它应该是一种或不是一种和操作:

代码语言:javascript
复制
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循环。

-

因为你想让它持续多久,只要这两个数字都给出了其他的东西,那么剩下的就等于零。使用&&计算器,只要其中一个表达式为真,它就会停止。

从何处开始

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19892734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档