程序使用while与数组值

时间:2014-04-24 03:44:25

标签: ruby arrays

我正在尝试编写一个小程序,该程序通过数组的值输出每个单独的值。当它达到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

如果这是一个非常简单的解决方案,我只是在抱歉。

5 个答案:

答案 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;,这样的数字会很苛刻。