为什么我的迭代器给出错误的值?

时间:2018-07-12 10:44:17

标签: ruby

我希望打印出每个数字,而不仅仅是一个大数值。这是我的代码:

i = 20
loop {
    i -= 1
    print i
    break if i <= 0
}
# >> 191817161514131211109876543210 

我尝试过:

  • 仅打印i
  • doend切换括号
  • 更改i的值

3 个答案:

答案 0 :(得分:2)

puts在传递每个参数之后添加新行(除非已经有换行符结束arg)。

print未添加新行。

因此,您需要切换到puts

i = 20
loop {
    i -= 1
    puts i
    break if i <= 0
}

这大致等同于使用以下代码:

i = 20
loop {
    i -= 1
    print "i\n"
    break if i <= 0
}

\n是换行符:

  

\ n此时在文本中插入换行符。

下面是将多个args传递到puts语句的示例,以真正简化您的代码:

puts *(0..20)

或者,按照相反的顺序使用:

puts *19.downto(0)

这使用splat运算符将范围作为参数发送到puts,为您提供所需的输出,

希望这会有所帮助-如果您有任何疑问,请告诉我。

答案 1 :(得分:1)

您正在使用打印,它将打印行到控制台,但末尾没有\ n。

print更改为puts

答案 2 :(得分:0)

当您已经有了解决方案时,您需要将print替换为puts。我正在向您展示获得相同输出的替代解决方案:

puts (0..20).to_a.reverse

OR

(0..20).to_a.reverse.each{|i| puts i}

输出:

20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0