2016-11-11 15 views
1

Rubyを初めて使用しています。次のように乱数を作成する方法があるかどうかを知りたいだけです。Ruby。乱数生成器

1)45個の乱数を生成します。生成

2)乱数は、私は、次のアプローチを使用して試した5回

まで繰り返すことができます。

45.times do |x| 
    puts x.rand(1..9) 
end 

最大発生数を5にするにはどうすればよいですか?

+1

0〜5の範囲で45の乱数が必要ですか? – inaitgaJ

+0

nope。私は45の乱数を作りたがっていました。しかし、5以上に達した場合は、その番号を乱数で使用しないでください。 –

+1

@EjayTanあなたの説明はちょっと複雑に思えます。 1から9の各数値を正確に5回含むシャッフルされた配列が必要です。 – Stefan

答えて

2

私はこのようなものだろう:これは9に、すべての数値フォーム1配列を生成

Array.new(5) { (1..9).to_a }.flatten.shuffle 

を正確に5回存在し、ランダムにその配列をシャッフル。

numbers = Array.new(5) { (1..9).to_a }.flatten.shuffle 

3.times do 
    puts numbers.pop 
end 

pop戻り番号を使用して、配列から削除:それはあるかpopそれから、次の乱数として

は、ニーズに応じて、あなたは、この配列を使用する場合があります。つまり、45サークルの後にnumbers配列は空になります。

+0

Toは 'flat#'を避けるために 'Array#*'を使うこともできます。 '((1..9).to_a * 5).shuffle ' – Stefan

+0

' 3x'はおそらく '45x'であるべきです。配列が空になるまで要素を削除するのではなく、そこに魔法の番号「45」を入れるのがよりクリーンなのでしょうか? 'のようなもの(n = numbers.pop); nを入れる;終わり。また、 'pop'は直感的ではない_last_要素を削除します。 – Stefan

+0

@Stefan私は全く同意します。私はコンソールに簡単にペースト可能な 'pop'をどのように使うかの例として' 3t'部分のみを意味しました。私はOPがコンソールに値を印刷するプログラムを書くだけではないと思います。したがって、IMOは、この無秩序配列の使用法、そのコンテンツをどのように消費したいのか、によって異なります。しかし、whileを使うことは確かに魔法の数よりも優れています。あなたが正しいです。 – spickermann