JAVAで乱数を使いたいのですが、同じ数を出さない方法が今一度
わかりません。
プログラムはサーブレットで記述しており、ブラウザで「数を出す」ボタンがおされたら、リクエストを受けたサーブレットは、一つ、1~10までの数を出し表示はJSPです。そしてまたボタンが押されたら、一つ、1~10までの数を出します。
以下に今のサーブレットに記述してあるプログラムの状態を書かせていただきますので、同じ数字を出さない方法が何かございましたら教えてください。宜しくお願いします。
long seed = System.currentTimeMillis(); //時間で乱数値をとる
Random r1=new Random(seed); //乱数ジェネレータを作成する
int i;
i = r1.nextInt(10)+1;//入力された命令回数をint型に変換し1から10までの数が出されiに入る。
No.5ベストアンサー
- 回答日時:
もちろんIteratorによる順次アクセスも可能です。
先ほどの例に続けると、下記の様になるでしょうか。
import java.util.Random;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator; // 追加部分
class Test
{
public static void main(String [] args)
{
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0 ; i<10 ; i++)
{
list.add(i);
}
System.out.println(list);
Collections.shuffle(list , new Random());
System.out.println(list);
// 追加部分
Iterator<Integer> it = list.iterator();
while(it.hasNext())
{
System.out.print(it.next() + " ");
}
System.out.println();
}
}
この回答への補足
なるほど。あの変な質問ですが・・・もしなんですが、サーブレットでこのような定義をしたら、リクエストがあるたびにまたいちから数値をランダムにして取り出すので、同じ数字がでてしまいますよね。?恐らくそのようになると思うのですが・・・・。
補足日時:2007/12/26 10:33No.6
- 回答日時:
>なるほど。
あの変な質問ですが・・・もしなんですが、サーブレットでこのような定義をしたら、リクエストがあるたびにまたいちから数値をランダムにして取り出すので、同じ数字がでてしまいますよね。?恐らくそのようになると思うのですが・・・・。そうですね。そうなると思います。
私はサーブレットは詳しくないので、サーブレットでどのような手法を用いるのが適切かはわかりませんが、
一般論としては乱数列をあらかじめファイルなどに用意しておき、
リクエストがあるたびにファイルから乱数を取り出し、
消費した乱数を消去する、というような手順をとることになるかと思います。
なるほど。確かにそのようにも考えられますね。
わかりました。皆様からのアドバイスをもとに、もう少し考え、まとめてみます。恐らく、サーブレットとモデル両方で試してみる必要もあるかと思いますので。モデルで考える際には、あなた様のご回答の例プログラムを参考にさせていただきたいと思っております。
この度は、ご親切なご回答誠にありがとうございます。
とても助かりました。
あなた様を含め、ここでご回答して下さった方々には大変感謝しております。
ここ数日間、様々な方にアドバイスを頂きお世話になっております。
私は幸せ者です。今後も、何卒宜しくお願い申し上げます。
No.4
- 回答日時:
rancoさんのおっしゃているやり方を使用した場合の簡単な例です。
1~9までの数字をリストに用意し、シャッフルして乱数列とします。
import java.util.Random;
import java.util.ArrayList;
import java.util.Collections;
class Test
{
public static void main(String [] args)
{
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0 ; i<10 ; i++)
{
list.add(i);
}
System.out.println(list);
Collections.shuffle(list , new Random());
System.out.println(list);
}
}
この回答への補足
あ、ありがとうございます。突然素晴らしい回答をして下さったので、驚き、言葉がでませんでした。とても助かりました。
あの、もう一つお聞きしたいのですが、listの先頭からひとつ
取り出すのはiteratorでせきると思うのですが・・・・できますよね?
あ、でも、iteratorを使うと次々に入っている数字が出てしまいますよね?ここのところを、もしよろしければ教えていただけませんでしょうか?
No.3
- 回答日時:
サーブレット という事は WEBですよね
10人がアクセスしたら、10人に違う数値を出せと言うことですか?
11人がアクセスしたら無理なので違うのかな
同じ人(ブラウザ)が、10回、数を出すボタンを押すと言う話だとして
11回目は?
次の日とかは?
ブラウザの戻るを押した場合は?
質問に、ここら辺の説明が無いと
既に出した1~10の乱数を覚えるバッファをstatic にすればいいのか
セッションにすればいいのか、postでやり取りするのか
全然やり方が変わると思うのですがどうなのでしょうか
この回答への補足
ご回答、補足要求ありがとうございます。説明不足な点がおおくあり大変失礼いたしました。あなた様の補足要求を拝見し、確かにおっしゃるとおりと思いましたので、一応?の部分の補足説明をさせていただきます。もしこれで、何か方法がございましたらご回答宜しくお願い致します。
>10人がアクセスしたら、10人に違う数値を出せと言うことですか?
■はい、そうです。今は何人アクセスしようが、同じ数字を出さないようにしたいのです。
>同じ人(ブラウザ)が、10回、数を出すボタンを押すと言う話だとして
>11回目は?
■そうですね、1から10と書かせていただきましたが、1から11あるいは1から100になる可能性も考え、数は増えてもアクセスしたら同じ数字を出さないようにしたいです。
>次の日とかは?
■たとえば、Aさんが8回ボタンをおしましたが、次の日9回からのカウントになるわけではありません。
数を出すときに、カウントしていて、初期値0を与えていますので、また1からとなります。
>ブラウザの戻るを押した場合は?
■戻るボタンをおしたら、またカウントの初期化なり、0からカウントされます。そしてまた、ランダムで同じ数字をださないように、の繰り返しです。
■■私はサーブレットで、ランダムを出し、モデルに数を入れ、JSPに参照させております。MVCでこの流れをしております。なぜMVCなのかは、話が複雑になりますので、今は何でもよいですので、方法やその記述の仕方等、教えてくださる方がおりましたら、お願いしたいと思っております。以上補足説明をさせていただきました。
No.1
- 回答日時:
ここで得られた "乱数" の利用目的が分かりませんが、【同じ数を出さない】といった操作を加えた時点で、それは乱数ではなくなってしまいます。
例えば、{1,2,3,4,5,6,7,8,9,10} の集合から、任意に1つの要素を取り出す、と言うようなことを考えなければならないと思います。
確かに、おっしゃるとおりかもしれません。
同じ数字を出さない時点で、乱数ではないな、と思っておりました。
あなた様がアドバイスしてくださった考え方でも試したいと思います。
今後結果がでましたら、補足のところに載せていただくかもしれません。アドバイスありがとうございました。
今後もよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
- Java Javaの問題なのですが、 永久ループを使って以下に従って数値を出力するプログラムを作成する。 ・1 3 2023/06/06 18:43
- 工学 疑似乱数生成器 3 2023/01/05 02:06
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Java Java 石取りゲーム 3 2023/02/02 15:46
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列を数式に
-
importするには java.io.*; imp...
-
Java での グローバルIP取得
-
アーティスト名リストを取得す...
-
JAVAサーブレット。 HTML...
-
パソコンキーボードで時分秒を...
-
ダブルクォーテーションのrepla...
-
Java 配列の問題です。 写真の...
-
素朴な疑問
-
1~100までの数字を表示し、か...
-
C言語のポインターに関する警告
-
ファイル名に変数を使う(Java)
-
MAPの配列・・・???!!!
-
Jupyter notebookですわかりま...
-
java プログラミングについて
-
Javaプログラムについて質問で...
-
ジャバスクリプトについて。
-
CString 数値チェック
-
Javaでの改行コード
-
EclipseでJava
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
干支の計算で。。。
-
Selenium IDEでexportしたコー...
-
Javaを使ってデジタル時計を作...
-
ColabでのPytorchのエラー
-
importするには java.io.*; imp...
-
生年月日と今日の日付から年齢...
-
ファイル名を動的に生成したい
-
文字列を数式に
-
<forEach> 内で供給された "ite...
-
シャットダウンフックが呼ばれない
-
Javaからストアド実行(配列項目)
-
ActionForm form にnullが入っ...
-
setAttribute(String, int)は適...
-
(急募)JavaカレンダーをGUI可に...
-
文字サイズが可変のラベル
-
Java での グローバルIP取得
-
python OpenPyXLを使って出力結...
-
データの外挿について
おすすめ情報