将输出存储到阵列中使用的变量

问题描述:

下面我的代码的片段翻转硬币并输出10个总正面或反面的结果。将输出存储到阵列中使用的变量

(例如元首尾巴尾巴首脑...)

我想这个存储到一个变量,我可以把它变成一个数组,并使用其字符串。

%w [动作]只输出字符串“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 

此:

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

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

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

Integer#times方法返回一个枚举器,因此您可以使用Enumerable中的任何方法,而不是直接将块交给它。特别是,你可以使用collect在一个漂亮的一小段代码来构建一个数组:

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

这使你在Array 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 

然后你会得到你的头和Rails在数组中。

+0

绝对发现答案。我学到的不仅仅是寻找解决方案。非常感激! – Tony 2012-01-06 01:03:09

+0

@Tony:你可以用'rand(2)替换你的'flip'实现。 '头':'尾巴'(或各种类似的东西)以及。而且你不需要每次都创建一个新的Coin,没有状态,所以你可以'c = Coin.new; a = 10.times.collect {c.flip}'。 – 2012-01-06 01:27:37

+0

太棒了。兰特(2)。即便?? “头部”:“尾巴”将代码缩短了很多,而且的确很有效。 – Tony 2012-01-06 01:43:33

act结果转换成一个数组。

arr = [] 

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

p arr # => [...] 
+0

伟大的帮助!但由于某种原因,在十行头和尾部之后放置阵列输出10个空行。我不认为coin.flip正在放入阵列中。 – Tony 2012-01-06 00:44:34

+0

'10.times.map {Coin.new.flip}'更整洁。 – Fraser 2012-06-03 22:01:50