我正在尝试编写一个小程序,该程序通过数组的值输出每个单独的值。当它达到15时它停止并输出“太大”。
为什么我的逻辑错误,对我来说是有道理的。
x = [10,11,12,13,14,15,16,17,18]
def counting
for x[y]
while y < 15
puts y
else
puts "too big"
end
puts counting
如果这是一个非常简单的解决方案,我只是在抱歉。
答案 0 :(得分:2)
这就像Ruby语法一样。您需要.each
和简单if
声明:
x.each do |y|
if y < 15
puts y
else
puts "too big"
break
end
end
答案 1 :(得分:1)
虽然你试图像使用c风格的编程语言一样使用Ruby。虽然不推荐,但这是可行和可行的。
Ruby的结构称为代码块。代码块有点像匿名函数。 您可以阅读有关代码块here的更多信息。
x = [10,11,12,13,14,15,16,17,18]
# This is a code block.
x.each do |y| # The y between the '|'s is the parameter caught by the code block
if y < 15
puts y
else
puts "Too big."
break # Break out of the loop
end
end
答案 2 :(得分:0)
如果你想要一个班轮:
x.each {|y| y < 15 ? puts(y) : puts("too big") || break }
如果你坚持使用while,可以按照以下步骤完成:
i = 0
while i do
x[i] < 15 ? puts(x[i]) : puts("too big") || break
i+=1
end
答案 3 :(得分:0)
我认为使用时最简洁的方法是:
def counting(x)
i = 0
while x[i] < 15
puts x[i]
i += 1
end
puts 'too big'
end
counting([10,11,12,13,14,15,16,17,18])
答案 4 :(得分:0)
为什么我的逻辑错误,对我来说是有道理的。
鉴于你的程序在语法上是不合法的,如果它在语法上是合法的,那么就不可能知道它的语义是什么,更不用说为什么那些语义错了。但是,这是一个惯用的Ruby解决方案(你几乎不会在任何Ruby代码中使用或看到while
,你肯定永远不会看到for
):
puts x.take_while {|n| n < 15 }
puts 'too big'
我更喜欢用无点样式编写,但在这种情况下,唯一的方法是利用条件的对称性并反转操作数的顺序,这将导致笨拙的逻辑:
x.take_while(&15.method(:>))
Ao,在这种情况下,我宁愿避免使用无点样式,因为它不再符合原始规范。我们现在已经采取了所有数字,使得15比这些数字更大,而不是#34;取得所有数字&#34;,这样的数字会很苛刻。