2012-01-06 12 views
0

以下のコードでは、コインを反転して合計10個のヘッドまたはテールの結果を出力します。配列内で使用する変数に出力を格納する

(例えば頭尾は尾をヘッズ...)

私は配列にそれを置くと、その文字列を使用することができます変数にこれを保管したいと思います。

%w [act]は、文字列 "act"のみを出力します。どのようにして行の文字列配列を出力するコード行を得ることができますact = coin.flip?

を更新して配列にact結果を入れ

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

この:

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

は配列を生成しません。 10個のコインフリップを作成して投げ捨てるだけで、その表現の結果は実際は10です。配列が必要な場合は、その配列を作成する必要があります。

ダグラスのアプローチを取るか、少し慣れてみてください。

メソッドは、ブロックを直接渡すのではなく、Enumerableメソッドのいずれかを使用できるように、列挙子を返します。あなたの配列aで10のフリップを与え、その後、あなたがputs aputs a.join(', ')を缶や何でもしたい

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

:特に、あなたは、コードの1つのすてきな短い断片の配列を構築するためにcollectを使用することができます。それはArray of whitespace separated wordsを生成するためだから

%w[]は動作しません:空白

で区切られた単語の

%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

+0

@トニー:あなたの 'flip'実装を単に' rand(2).even 'で置き換えることができますか? 「頭」:「テールズ」(または同様のさまざまなもの)も同様です。また、毎回新しいコインを作成する必要はありません。状態がないので、あなたは 'c = Coin.new; a = 10×collect {c.flip} '。 –

+0

素晴らしいです。 rand(2).even ?? 'Heads': 'Tails'はコードを大幅に短縮し、実際に動作します。 – Tony

1

完全なコードを追加しました。

arr = [] 

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

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

大きな助け!しかし何らかの理由で、10行のHeads and Tailsの後に10行の空白行を出力します。私はcoin.flipが配列に入れられているとは思わない。 – Tony

+0

「10×map {Coin.new.flip}」はそれほど優れていない。 – Fraser

関連する問題