Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 而循环vs循环是_Ruby_Loops_While Loop - Fatal编程技术网

Ruby 而循环vs循环是

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条件不再被评估

我正在编写代码,寻找两个整数的最小公倍数。我首先以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
开始循环是没有意义的。谢谢你的回答,这现在完全有意义了。这也是一个很好的观点。谢谢!我希望我也能检查你的答案或者至少投赞成票,但不幸的是,我还没有足够高的声誉去投赞成票。这也是一个好观点。谢谢!我希望我也能检查你的答案,或者至少投赞成票,但不幸的是,我还没有足够高的声誉去投赞成票。