• ベストアンサー

C++CLI Randomクラスの初期化

乱数の生成で悩んでいます。 Random^ rnd = gcnew Random((unsigned)time(NULL)); textBox1->Text = (rnd->Next(66) % 6).ToString(); 上記をボタンクリックで行っているのですが、 ボタンを連打すると2、3回同じ値が続けて出力されます。 ボタンを連打しても、毎回違う値にしたいのですが、方法がわかりません。 アドバイスよろしくお願い致します。「

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

rndをメンバ変数にし、 rnd = gcnew Random((unsigned)time(NULL)); を一回だけ(たとえばフォームのロード時に)行う。

tamuhiro1004
質問者

お礼

ありがとうございます。 なるほどです。 参考になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C#についてです

    乱数を発生させて、折れ線グラフを作りたいのですが、分かりません。 乱数を15個、100までの範囲で発生させたかったので、下のように書いては見ました。      Random rnd = new Random(); for (int i = 0; i < 15; i++) { rnd.Next(100); } この乱数を、配列にして、グラフを作りたいと思っています。 配列にするにはどうすれば、よいのでしょうか? お願いいたします。

  • Cシャープ教えてください・・・・。

    今回もお世話になります。。 仕事の研修でC♯を勉強しているのですが、 分からないところを教えていただけたらと思っています。 練習問題を解いているのですが、 【問1】 (1)ボタンを押すと1~5までの数字がテキストボックスにランダムに表示される (2)ラベルを作成し、表示された数字が奇数なら『奇数』と表示・数なら『偶数』と表示 ※途中まではヒントとして記入してある状態です。 private void button2_Click(object sender, System.EventArgs e) { // Random クラスの新しいインスタンスを生成する Random rnd = new System.Random(); // 1以上6未満の乱数を取得する int rndNo = rnd.Next(1,6); // テキストボックスに表示 textBox1.Text = rndNo.ToString(); ------------- ☆ここは条件分岐のif文を使えばよいのでしょうか?? 【問2】 ラジオボタンが3つとラベルが1つ表示された状態です。 (1)ラジオボタン【表示する】が選択された場合、ラベルを表示する (2)ラジオボタン【表示しない】が選択された場合、ラベルを表示しない (3)ラジオボタン【赤くする】が選択された場合、ラベルの文字を赤くする ☆これはラジオボタン1つ1つにイベントを記入するのでしょうか? ☆それとも1つのラジオボタンに、if文などを使い記入するすのでしょうか? 参考書やネットでいろいろ調べたのですが、理解に乏しくまったく先に進めません。 教えていただけたらうれしく思います。 よろしくお願いしたします。

  • c言語で乱数を扱うときの

    乱数を初期化するために srand((unsigned)time(NULL)というのを使いますが これはどういう意味を表してるんでしょうか? timeは1970年から経過した時間を表していることは分かりますし unsignedは符号ビットをなくして表せる数を倍にしてることも分かりますが、 NULLって何のために書いてあるのでしょうか?

  • LSI C-86を利用した時の乱数の挙動について

    C++の6.0を使っています。 srand((unsigned)time(NULL)); を使って1~9の乱数を作らせているのですが、 LSI C-86 Ver 3.30 試食版を使ってexeを作り、 作られた乱数を見ると 1の位置だけがランダムに決まり、   3 2 1 9 8 7 6 5 4 のように、他の数値は順番になってしまいます。 C++上で実行している時は、 全ての数値がランダムに配置されます。 これがどのような理由によるものなのか わかる方がいらっしゃいましたら、 その理由と解決策をお願いします。

  • 数当てゲームを作っているのですが

    数当てゲームを作っているのですが 乱数を設定してその値よりも小さい値を入力したら「小さい」、 大きい値を入力したら「大きい」と表示して その値を入力したときは「正解」と表示するような数当てゲームを作っています。 一応コードは書けたのですが、コンパイル、実行がうまくいかないのです。 ご指摘お願いします。 以下コード /* 1~99の乱数を発生させる */ #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int i,random; // 乱数の種を植える,種に時間を使う srand((unsigned)time(NULL)); for(i=0; i<1; i++) { //乱数の発生 random = 1 + rand()%99; printf("%d\n",random); } printf("数当てゲームをはじめます。\nコンピュータが当たり数を用意しました。当たり数は1~99の間にあります。\n"); for(;;) { printf("あなたの予想は? > "); scanf("%d",&i); if(i>random) puts("大きい"); else puts("小さい"); break; } if(random - i = 0) printf("正解"); return (0); }

  • C#の乱数取得について

    C#の乱数取得について カテ違いですが、C#のカテゴリがないのでここで質問させていただきます。 C#の乱数取得について調べましたところ以下のプログラムサンプルを見つけました。 1| int seed = Environment.TickCount; 2| string s = ""; 3| 4| for (int i = 0; i < 10; i++){ 5| Random r = new Random(seed++); 6| for (int j = 0; j < 5; j++){ 7| s += r.Next(50).ToString("00") + " "; 8| } 9| s += Environment.NewLine; 10| } 11| this.textBox1.Text = s; C#は勉強し始めたばかりで、まだまだ知識不足なのでこのプログラムが理解できません。 今の自分の知識で考えたことは、 1行目、int型のseedに、C#の乱数を生成するときにデフォルトで設定されるseed値を格納。 2行目、stringクラスのsを定義。 5行目、Random型(?)rにseedを設定 7行目、わかりません。。乱数を取得してることはわかるのですが。 9行目、sに保持。 11行目、GUIに表示。 どなたか、詳しく解説していただけると助かります。 よろしくおねがいします。

  • 完全な乱数を生成する方法

    C言語で乱数を生成するときに、今まで srand(time(NULL)); を使用していたのですが、それだと1秒以内に複数の処理を行った際に、 同一の乱数が生成されてしまいます。 時間にとらわれずに完全にランダムな数字を出現させるにはどのような方法を取るのが簡単なのでしょうか? よろしくお願いします。

  • 乱数について

    Visual Studio2008を使っています。 #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void){ int i; srand(time(NULL)); i=rand(); printf("%d\n",i); return 0; } 乱数を作るために上のようなプログラミングを作りました。 これを「ソリューションのビルド」すると 【warning C4244: '引数' : 'time_t' から 'unsigned int' への変換です。データが失われる可能性があります。】 と出ます。 このまま行っても乱数が出来るのですが どうしたらいいのでしょうか? 8行目を srand(time_t(NULL)); srand((unsigned)time(NULL)); と変えればいいのでしょうか? time_tでやると乱数が同じ値しか出てきません。 教えてください。

  • 初期化しているつもりなのに、初期化されずにrand関数の結果を得る

    皆様。こんにちは。 C++で簡単なプログラムを書いていたつもりでしたが、 コンパイルが正常であった後に、 プログラムを動作させてみたら、 自分の意図とは少し異なる結果となり、 どこが違うのか?が どうも自分では分かりかねてしまい、 アドバイスをいただきたく 質問させていただきました。 以下の例にあるように、 「a」と「b」という2文字の間に ランダム関数で作成した「任意の数字」を挟む処理を行い その結果を画面に表示するつもりです。 また、この処理を「num」で指定した回数分だけ 実行させたいと思っていました。 ■表示させようとした結果:「a」+「生成した乱数」+「b」 ■担当プログラム ------------------------------------------------------ for (int i=0; i<num; i++) { std::stringstream keystream ; srand((unsigned)time(NULL)); // 乱数の初期化 int randomnum = rand()% 109999999; // 乱数の生成 keystream << "a" << randomnum << "b" ;    printf(keystream); } ------------------------------------------------------ しかし、実際には、 指定された回数分だけの、 表示結果は得られるものの、 a123456b a123456b a123456b a123456b a123456b 上記例(num=5)のように、 乱数の部分が、全部同じ乱数となっていました。 しかし、forの中で 新たに乱数を生成する際、 生成する前に、 乱数の初期化をしているつもりでいますので、 プログラムを実行させた場合に、 表示させれた結果が、 どうして全て同じ乱数を得ているのか?が分からないでいます。 何かアドバイスいただけるとありがたいです。 宜しくお願い致します。

  • 色の数値を別のフォームに引き渡したいです。

    色の数値を別のフォームに引き渡したいです。 Random rnd = new Random(); int red = rnd.Next(256); int green = rnd.Next(256); int blue = rnd.Next(256); このint redやint greenを新しく開くフォームにも同じ値を呼び出したいのですが、、、 よろしくお願いします。 開発環境はVC#2008です。