将输出存储到要在数组中使用的变量中

时间:2012-01-06 00:24:35

标签: ruby

下面我的代码片段翻转一枚硬币并输出总共10个头部或尾部的结果。

(例如,Heads Tails Heads Tails ......)

我想把它存储到一个变量中,我可以把它放到一个数组中并使用它的字符串。

%w [act]仅输出字符串“act”。如何从行act = coin.flip?

中获取该行代码以输出我的字符串数组

更新并添加完整代码

class Coin

  def flip
    flip = 1 + rand(2)
      if flip == 2 
        then puts "Heads"
      else
        puts "Tails"
      end
  end   

end

array = []

10.times do
  coin = Coin.new
  array << coin.flip 
end

puts array

2 个答案:

答案 0 :(得分:2)

此:

10.times do
  coin = Coin.new
  act = coin.flip
end

不会产生数组。它只是创建十个硬币翻转并将它们全部抛弃,实际上,该表达式的结果是10.如果你想要一个数组,你需要构建一个。

你可以采取道格拉斯的方法或尝试一些更惯用的东西。

Integer#times方法返回一个枚举器,因此您可以在其上使用任何Enumerable方法,而不是直接将其移交块。特别是,您可以使用collect在一段很短的代码中构建一个数组:

a = 10.times.collect { Coin.new.flip }

这会在数组a中为您提供10次翻转,然后您可以puts aputs a.join(', ')或任何您想要的内容。

%w[]无效,因为这是用于生成Array of whitespace separated words

  

%w[]非插值的单词数组,由空格分隔

所以%w[a b c]只是更好的说法['a', 'b', 'c'],而%w[]中的字词被视为单引号字符串,而不是要评估的变量或方法调用。


似乎正在进行一些编辑。您还需要将flip方法修改为返回翻页,而不是将其打印出来:

def flip
  flip = 1 + rand(2)
  if flip == 2 
    "Heads"
  else
    "Tails"
  end
end

然后你将把你的Heads和Rails放在阵列中。

答案 1 :(得分:1)

act结果放入数组中。

arr = []

10.times do
  coin = Coin.new
  arr << coin.flip
end

p arr # => [...]