C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: 乱数(Random関数)とfor文の処理の関係について


(過去ログ 60 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■34346 / inTopicNo.1)  乱数(Random関数)とfor文の処理の関係について
  
□投稿者/ DemonHead (1回)-(2009/03/26(Thu) 16:20:00)

分類:[C#] 

初めまして。
プログラムの勉強に趣味で個人的なツールを作成しております。
環境はWindows Vista Business Service Pack1
VisualStudio2005でC#を使用しております。

例えば、○か×かを表示するプログラムで、70%の確率で○がでるとします。
うん%の確率で処理をする、というコードの書き方が分からなかったので―

Random cRandom = new Random();
int iRandom = cRandom.Next(1, 100);

のようにして、1から100までのランダムな数字を算出し、その数字が70以下だったら○を表示するという風にしています。
ボタンを押すと押した回数と、○が出た回数が表示されます。
一回一回実行ボタンを押し、試しに100回押してみると○の出た回数が70前後のそれっぽい結果が算出されます。

for文を使い、その算出をそのまま100回連続させた「100回連続」ボタンなるものを作成してみたのですが、
結果を見てみると100回計算されているにも関わらず○が出た回数が0回とか100回とかが結構な頻度で算出されてきます。

試しに10回処理にして、その都度何が算出されたかを逐一メッセージボックスなどで確認してみると、
やはり良好な結果(毎回70前後)になるのですが、100回処理にした場合に限りどうにも納得のいかない結果になってしまいます。

Random関数などはfor文の中に混ぜるとあまり良くないのでしょうか?
アドバイスや問題点などありましたら是非教えてください。よろしくお願いいたします。



引用返信 編集キー/
■34347 / inTopicNo.2)  Re[1]: 乱数(Random関数)とfor文の処理の関係について
□投稿者/ こくぶん (9回)-(2009/03/26(Thu) 16:31:27)
こくぶん さんの Web サイト
No34346 (DemonHead さん) に返信
> for文を使い、その算出をそのまま100回連続させた「100回連続」ボタンなるものを作成してみたのですが、
> 結果を見てみると100回計算されているにも関わらず○が出た回数が0回とか100回とかが結構な頻度で算出されてきます。

for文の中で new を呼んでませんか?

# ダメな例
for (int i = 0; i < 10; i++) {
  Random cRandom = new Random();
  int iRandom = cRandom.Next(1, 100); // ほぼ毎回同じ値が取れる
}

# これならそれなりの結果が返ってくるハズ
Random cRandom = new Random(); // for 文の前で一回だけ初期化する
for (int i = 0; i < 10; i++) {
  int iRandom = cRandom.Next(1, 100);
}

引用返信 編集キー/
■34348 / inTopicNo.3)  Re[1]: 乱数(Random関数)とfor文の処理の関係について
□投稿者/ .SHO (768回)-(2009/03/26(Thu) 16:33:25)
No34346 (DemonHead さん) に返信

> Random関数などはfor文の中に混ぜるとあまり良くないのでしょうか?

関係ないです。

ソース載せてください。
その方が話が早そうです。
引用返信 編集キー/
■34349 / inTopicNo.4)  Re[2]: 乱数(Random関数)とfor文の処理の関係について
□投稿者/ επιστημη (1852回)-(2009/03/26(Thu) 16:36:12)
επιστημη さんの Web サイト
> for文の中で new を呼んでませんか?

↓なんというデジャヴ (^^
http://bbs.wankuma.com/index.cgi?mode=al2&namber=34275

引用返信 編集キー/
■34350 / inTopicNo.5)  Re[3]: 乱数(Random関数)とfor文の処理の関係について
□投稿者/ こくぶん (10回)-(2009/03/26(Thu) 16:46:13)
こくぶん さんの Web サイト
No34349 (επιστημη さん) に返信
>>for文の中で new を呼んでませんか?
>
> ↓なんというデジャヴ (^^
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=34275

ありゃりゃ。。。
ってか、動作結果聞く限り、それ位しか思い浮かびませんでした。 ^^;;

# C++ のトピック読み飛ばしてるからこんな事に。。。
# 遺憾ですねぇ。<自分自身に
引用返信 編集キー/
■34352 / inTopicNo.6)  Re[4]: 乱数(Random関数)とfor文の処理の関係について
□投稿者/ 倉田 有大 (497回)-(2009/03/26(Thu) 17:20:09)
話はそれますが、メガドライブのぷよぷよで、電源投入後、同じタイミングでスタートボタンを押すと、まったく同じようにぷよぷよが
落ちてくるなんてことを思い出しました。
引用返信 編集キー/
■34353 / inTopicNo.7)  Re[5]: 乱数(Random関数)とfor文の処理の関係について
□投稿者/ Hongliang (351回)-(2009/03/26(Thu) 17:33:57)
Next(1, 100) だと 1 - 99 までの範囲内の 99 種類なので、1 / 99 になっちゃいますけど。
引用返信 編集キー/
■34490 / inTopicNo.8)  Re[6]: 乱数(Random関数)とfor文の処理の関係について
□投稿者/ DemonHead (2回)-(2009/03/31(Tue) 10:38:21)
No34347 (こくぶん さん) に返信
> for文の中で new を呼んでませんか?

まさにその通りでした…。
newをfor文の外に出して数回テストしてみたところ、見たところ良好な結果が得られました!
ありがとうございました!!

No34353 (Hongliang さん) に返信
> Next(1, 100) だと 1 - 99 までの範囲内の 99 種類なので、1 / 99 になっちゃいますけど。
1は含まれるのに、100は含まれないのですか…。
となるとNext(X,Y)はX以上、Y未満ということですね。
勉強になりました、ありがとうございました。

閲覧、回答が遅れてしまって申し訳ありませんでした。
週末はネットに触れられる環境になかったもので…。

書き込んでくださった皆様、大変ありがとうございました!!
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -