アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB2005で乱数を作り、ボタンを押すごとに一つづつその数字がひょうじされるようにしたいのですが、その数字が一度も重複されないようにするにはどうしたらいいのでしょうか?
例えばボタンを百回押すと、1から100までの数字がランダムに、一度も重複されずに表示されるようにするにはどのようなコードを書けばよいのでしょうか?

A 回答 (5件)

>もう一度同じ作業を行った際に、


Form1_LoadにRandomize()を追加します。
Rnd関数の乱数ジェネレータに新しいシード値を指定して初期化。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Integer
For i = 1 To 100
tbl.Add(i)
Next
Randomize()
End Sub
    • good
    • 2
この回答へのお礼

ありがとうございました。
とっても助かりました!

お礼日時:2007/09/30 04:53

http://www.relief.jp/itnote/archives/001798.php
これはエクセルのワークシートの例だが、プログラムにも大様できる
でしょう。セルは配列にし、Rank関数にあたる機能のルーチンは自作。
    • good
    • 0
この回答へのお礼

ページを拝見させていただきました。
エクセルで用いている方法を利用するという手もあるのですね。
ありがとうございました!

お礼日時:2007/09/29 13:04

1から100までの数字が順番に格納された配列を用意し、その配列のn番目とm番目の数字を入れ替えます(nとmは乱数で発生します)。


この入れ替え操作を十分な回数行ってから、配列を順に表示すれば所望の結果が得られると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
説明のみで理解できるほど私の頭がついていっていないので難しいのですが・・勉強します。ありがとうございました。

お礼日時:2007/09/29 13:22

Private tbl As New ArrayList



Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Integer
For i = 1 To 100
tbl.Add(i)
Next
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer
If tbl.Count <= 0 Then Exit Sub
i = Rnd() * (tbl.Count - 1)
MsgBox(tbl(i))
tbl.RemoveAt(i)
End Sub

101回目のことは考慮してませんが。

この回答への補足

早速のお返事ありがとうございます。
書いていただいたコードで出来ました!ありがとうございます。
ただ、プログラムを終了して、もう一度同じ作業を行った際に、
違う順番でまた先ほどのようなランダムな数字を得る事は可能でしょうか?
わかれば教えていただきたいです。よろしくお願いします!

補足日時:2007/09/29 12:51
    • good
    • 0

同じ数字が出てはいけないというルールは乱数だけでは実現不可です。

(『不規則な』数値を発生させるというのが乱数ですから。)

よって、表示済みの数字を記録しておき、それとマッチしたらもう一回やり直しというトラップをおくか(ちとぶざまか?)、変数か何かで母集団を作成し、その中から乱数でひとつを選択、選択したものは母集団から削除するかのいずれかでしょう。

(いうまでもなく考え方だけです。)
    • good
    • 0
この回答へのお礼

私も乱数を使って式を作ってみたのですが、ランダムにはでるものの、重複の際の処理がわかりませんでした。
回答どうもありがとうございました!

お礼日時:2007/09/29 13:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A