为什么此代码不打印0到50(含)?
i = 0
until i <= 50 do
print i
i += 1
end
答案 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
更改为while
。 until
与while
基本相同,但条件反转。
答案 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)
其他答案解决了原始代码无效的原因,并指出了条件中的逻辑错误。但是,值得注意的是,采取更加惯用的方式来做你正在做的事情会完全避免条件。例如:
(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了解更多信息