打印0到50(含)?

时间:2014-07-31 17:35:19

标签: ruby-on-rails ruby

为什么此代码不打印0到50(含)?

i = 0
until i <= 50 do
  print i
  i += 1
end

9 个答案:

答案 0 :(得分:4)

使用

until i > 50 do
  # ...
end

while i <= 50 do
  # ...
end

这里有更多&#34; Ruby like&#34;例如:

(0..50).each do |i|
  puts i
end

答案 1 :(得分:3)

呃。

i = 0
until i <= 50 do
  print i
  i += 1
end

这将产生51次迭代,因为你从0开始并尝试运行直到达到50,除了until“没有”你的状况。如果你想循环,while可能是一个更好的测试:

i = 0
while i <= 50 do
  print i
  i += 1
end
>> 01234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950nil

但是,即使使用while,仍然会输出51个值:

i = 0
output = []
while i <= 50 do
  output << i
  i += 1
end
output.size # => 51

如果你想循环50次,为什么不使用:

50.times do |i|
  puts i
end

或者:

50.times { |i| puts i }

答案 2 :(得分:2)

until更改为whileuntilwhile基本相同,但条件反转。

答案 3 :(得分:2)

另一种使用的迭代方法是upto

0.upto(50) do |i|
  puts i
end

我真的很喜欢这种快速编号迭代的方法。它是超级惯用语(它按照它所说的那样)并且包含起始值和结束值,因此您不必计算/说明独占结束值。

答案 4 :(得分:1)

until在条件为真时停止执行。因为从一开始就是如此,没有任何反应。

答案 5 :(得分:0)

只需交换比较运算符。

i = 0
until i > 50 do
  print i
  i += 1
end

您也可以

i = 0
while i <= 50 do
  print i
  i += 1
end

答案 6 :(得分:0)

使用Idiomatic Ruby

其他答案解决了原始代码无效的原因,并指出了条件中的逻辑错误。但是,值得注意的是,采取更加惯用的方式来做你正在做的事情会完全避免条件。例如:

(1..50).each { |i| pp i }

答案 7 :(得分:0)

这很有效。 ;)

i = 1
while i < 51 do
  print i
  i += 1
end

答案 8 :(得分:0)

你比较的第一件事是向后唱

你想做点什么:

i = 0
until i >= 50 do
  print i
  i += 1
end

您可以查看http://ruby-doc.org/core-2.1.2/doc/syntax/control_expressions_rdoc.html#label-until+Loop了解更多信息