0

我刚开始尝试在另一个网站上学习 Ruby,到目前为止它很有意义。但是这个让我很困惑。目标是让程序使用“next”仅显示从 20 到 0 的偶数。该教程显示正确的代码应该是next if i % 2 == 0,这是有道理的,但它一直失败。当我将 0 更改为 1 时,它起作用了。

这是教程显示的代码应该可以工作并且对我有意义:

i = 20
loop do
  i -= 1
  next if i % 2 == 0   # this is the line that changed
  print "#{i}"
  break if i <= 0
end

以下是本教程接受为正确的代码:

i = 20
loop do
  i -= 1
  next if i % 2 == 1   # this is the line that changed
  print "#{i}"
  break if i <= 0
end
4

3 回答 3

1

next跳过循环中的以下代码并返回开始并开始下一个循环。所以如果你想显示偶数,你需要用 跳过奇数next if i % 2 == 1,反之亦然。我想知道你在读什么教程...

i循环中变为0时,满足条件i % 2 == 0next将执行,break跳过之后的检查。

一种可能的更改是i在将其打印到控制台之前检查是否为非负数(否则中断),这将导致以下代码:

i = 20
loop do
  i -= 1
  next if i % 2 == 0   # this is the line that changed
  break if i < 0
  print "#{i}"
end

要仅显示偶数,您应该从 开始i = 21,因为第一个循环将从 i 中减去 1,因此您将没有机会测试i = 20

i = 21
loop do
  i -= 1
  next if i % 2 == 1   # this is the line that changed
  print "#{i} "
  break if i <= 0
end
于 2013-06-19T02:58:19.800 回答
0

我现在明白了。如果 i % 2 == 0,它会跳过下一行,即打印行。当我做到 i % 2 == 1 时,它不会跳过打印行。

于 2013-06-19T23:01:04.790 回答
0

我无法解释为什么要按原样编写教程。我认为它写得不够清楚,而且它显示的代码不是你在现实生活中想要写的,这对你造成了伤害。学生们模仿他们的老师,所以通过展示写得不好的代码作为例子,他们教你写写得不好的代码。

Ruby 帮助我们简单地表达我们的想法:

20.downto(0) do |i|
  puts i if i % 2 == 0
end

是惯用的 Ruby。很容易看出发生了什么:

  • 我们开始20计算downto 0
  • |i|是 Ruby 将计数器的当前值分配给通过语句i包含的代码“块”内的变量的方式。doend
  • puts是一个智能版本,print将 的值输出i到显示屏上的一行,如果除以的i结果20%是“模”运算符。

当然还有一些事情没有说清楚,例如正确使用尾随if语句,如何puts查找尾随行尾并提供它们,将参数分配给块的变化,以及为什么和何时选择使用类似downtovs. a的方法loop. 在这一点上,至少学生会像其他人一样知道写它并且不必忘记它。

于 2013-06-19T14:32:42.800 回答