Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Randomについて

今、学習ソフトを作成していて、3択問題を作っています。
ランダム表示のプログラムとして
if(e.getSource() == b0) 
  {
    n = (int)(Math.random()*50);
    lb1.setText(m1.toi[n].question);
    lb2.setText(m1.toi[n].ans1);
    lb3.setText(m1.toi[n].ans2);
    lb4.setText(m1.toi[n].ans3);
  }
としています。"m1.toi[n].〜"で、別のjavaファイルからtxtファイルを読み込んでます。
 b0ボタンを押したら、次々と問題が読み込まれていくプログラムです。

 ここで、1回表示した問題を、再度出現しないようにするには、どうしたらよいでしょうか?

5

回答

78589

閲覧

5件の回答

評価

0

出題した「n」の値をListにでも格納しておいて、contains使って一致したら再度ランダム数を出すようにしては?

評価

0

containsは数が多くなってくると効率が悪いので、Listにランダムな順序を格納しておくのをおすすめします。
ボタンが押されるたびにインデックスを進め、インデックス番目のListの値をインデックスに使います。

Listをランダムに並べ替える方法はいくつかあります。

1. Listに0〜最大値-1を順に格納する
2. randomを使って1のListからひとつ取り出す
3. 別のListに2を格納する
4. 1のListから2を削除する
5. 1のListが空になるまで2〜4を繰り返す

とか

1. Listに0〜最大値-1を順に格納する
2. 末尾の要素をそれ以前のrandom番目の要素と交換する
3. 末尾のひとつ前の要素をそれ以前のrandom番目の要素と交換する
4. 先頭まで繰り返す

とか。

評価

0

予め乱数でシャッフルした配列を最初に作って
順番に取り出すという方法も良く使われます。

評価

0

あう、かぶりました^^;

評価

0

返信ありがとうございます。
なんとなくですが、やり方は、皆さんのおかげで理解できたのでとりあえず、今から取り掛かってみます。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。