- ベストアンサー
重複乱数で処理終了
nknk80の回答
- nknk80
- ベストアンサー率65% (17/26)
配列だと、割当てた要素数よりも一致しない乱数の数のほうが多いと 面倒ですので、クラスを使用したほうが便利です。 Set set=new HashSet(); while(true){ int rand=乱数取得; if(set.contains(rand)){ break; } else{ set.add(rand); System.out.print(rand); System.out.print(","); } }
関連するQ&A
- java 乱数を並べて重複させない方法
javaのプログラミングについて質問させてください。 まだ勉強し始めの初級者です。 1~25までの乱数を発生させ それらを重複させずに5列×5行に並べたいのですが、 Randomとfor文を使い乱数を発生させる事はできたのですが重複してしまいます。 ネットで調べたらArraylistのcontainsを使う等書いてあったのですが方法が分かりません。 5列×5行というのは ○、○、○、○、○、 ○、○、○、○、○、 ○、○、○、○、○、 ○、○、○、○、○、 ○、○、○、○、○、 という風に並べたいです。(○はすべて違う数字) どなたか分かる方ご教授よろしくお願いします。
- ベストアンサー
- Java
- 重複なし乱数について
重複なし乱数について VBAで重複なしの乱数を使ったプログラムを作りたいのですが上手く作れません。 助言お願い致します。 作るのは数比べゲームです。 フォーム上にボタン0~9を配置し、ボタンを押すごとに重複しない乱数をPC側で表示させ、 選択した数字と乱数を比較し勝敗を決定するというゲームです。 エクセル上に重複なし乱数を表示する方法はなんとなく分かるのですが、 ボタンを押すごとに重複なし乱数を取得する処理を行う方法が分かりません。 現状としては ボタンを押した処理の欄に pcNo = Int(9 * rnd + 0) を書いてただ乱数を取得している状態です。 回答よろしくお願い致します。
- ベストアンサー
- Visual Basic
- 重複しない乱数の生成
他の質問での回答に対してもう少し具体的に知りたいと思って投稿しました。 自分はいわゆる日曜プログラマです。 勉強のつもりでOKWebのコンピュータ関連でいろいろ回答してます。 (未熟者なのでとんちんかんなのが多いですが) で次の質問に回答しました。内容は「重複しない乱数を発生させる方法」です。 http://okweb.jp/kotaeru.php3?q=1239644 私が回答したのは#10です。私の考えは 1. 最初に配列に重複しない値を入れ(1から100を順番に) 2. 2要素の値を入れ換える 3. 2を任意の回数繰り返す 4. 配列の先頭から値を取り出す という考えです。 が、そのあと#12の回答があり、それを読むと私の方法ではマズイようです。 「どうしてマズイのか」ということはなんとなくわかった(ような)気がするんですが、 では「具体的にどうすべきなのか」が知りたいです。 違う方法として自分ではこう考えました。 上記1の配列(これを配列Aとする)と同じ要素数(ここでは100個)の配列Bを作って 1. 0~(配列Aの要素数 - 1)の範囲で乱数を発生させる -> 得られた数値をnとする 2. 配列A[n]の値を配列Bに入れる -> 最初は配列B[0]に入れる 3. 配列A[n]を削除 -> 要素数が1個減る 以下これを繰り返し、配列B[99]まで入れて終了。 過去の質問を覗いてみましたが、いろいろな方法があってどれがいいのか迷ってきま した。どちらかというと具体的なソースではなく考え方を教えてください。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- 乱数で同じものが出ない処理ってどうやるんですか?
.NETでタイピングゲームを作っています。 乱数を使って日本語とそのローマ字を1セットとして表示していくプログラムなんですが、どうしても同じものが出てしまうのですが、同じ日本語とローマ字のセットが表示されないようにするにはどうすればよいでしょうか? ちなみに、コード下記のように作りました。 Randomize() 乱数 = Math.Floor(Rnd() * 要素数) + 1 If 乱数 Mod 2 = 0 Then '乱数が偶数の時 Label1.Text = Typeword(乱数 - 1) '日本語表示 Label2.Text = Typeword(乱数) 'ローマ字表示 elseで、乱数が奇数の処理を行う。
- ベストアンサー
- Visual Basic
- 乱数の重複無しを作りたい
先回質問させていただき、乱数発生は教えてもらいわかりました。 <html><head><title>乱数発生器</title></head> <body> 1~150の乱数を発生させます。<br> <input type="button" value="発生させる。" onclick="alert( Math.floor( Math.random() * 149 ) + 1 )"> </body></html> これで今まで出た数字は出ないよう(重複しない)ようにしたいです。 どのようにすればいいのでしょうか? 出来れば上記コードふまえたコードを書いていただけると幸いです。 (すみません。JAVA初心者なのでどこに書いたらいいかわかりません) 目的はビンゴゲームのようなくじに使いたいと思います。 ですから人数はその会場に行かないとわからないので、MAXの数字は 自分で書けるようにしたいです。 よろしくお願いします。
- ベストアンサー
- Java
- 線形合同法(乗算型)による乱数発生法
javaを使って乱数を発生するプログラムを作っています。 線形合同法(乗算型)に基づいて発生させようと思うのですが、疑問点があり質問しました。 乱数発生の漸化式 X(i+1)= a*X(i) (mod M) で、a,M,そして乱数の初期値を決めたいのですが、ネットを使って調べたところ、 a=16807 M=2147483647 が良いという記述がありました。 しかし、これをプログラムに反映させるとintの範囲から出てしまうため、検出値にマイナスが入ってしまいます。 また乱数の初期値に関する記述が見つからなかったので、どのような値にすべきか悩んでいます。 また、検出値をある範囲に(例えば100000まで)にしたい場合は、M=100000にすればいいと思うのですが、その場合のaや初期値の値はどのように決定したらよいのでしょうか? 教えて下さい。よろしくお願いします。
- ベストアンサー
- Java
- 配列の重複削除について
データを作るプログラムで、配列の重複を削除したいのです。 配列の中身は乱数を発生させることで作ります。 内容は、 1 1 1 4 2 8 2 10 3 4 4 3 5 2 6 3 8 2 といった感じです。 ルールは、 *一列目と二列目が同じ数字ではだめ *(2 8)と(8 2)、(3 4)と(4 3)は重複しているので一方を削除 *()はつけない です。 プログラミング初心者なので、全くわかりません。 よろしくお願いします。
- 締切済み
- C・C++・C#
- エクセルで重複しない乱数の発生
今エクセルで正負の数の足し算の100ます計算を作っていたのですが、 どうしても乱数表示をさせている所のどこかで数字が重複してしまい困っています。 なにかいい式はありませんでしょうか? ちなみに乱数の数字の範囲は-10~10にする為に、 =INT(RAND()*(10+10)-10) という式でやっています。 素人質問ですがよろしくお願いします<(_ _)>
- ベストアンサー
- オフィス系ソフト
お礼
ご回答ありがとうございます HashSet()というクラスがあるのですか、知りませんでした・・・ 因みに主題とそれてしまうのですが HashSet() と ArrayList() の違いとはどういったものなのでしょうか? HashSet() はただ漠然と数字を表示する為のもので ArrayList() は数字を配列に格納するという手順がふくまれている という解釈であっていますでしょうか? 何はともあれ ご回答ありがとうございました!