- ベストアンサー
java 乱数を並べて重複させない方法
javaのプログラミングについて質問させてください。 まだ勉強し始めの初級者です。 1~25までの乱数を発生させ それらを重複させずに5列×5行に並べたいのですが、 Randomとfor文を使い乱数を発生させる事はできたのですが重複してしまいます。 ネットで調べたらArraylistのcontainsを使う等書いてあったのですが方法が分かりません。 5列×5行というのは ○、○、○、○、○、 ○、○、○、○、○、 ○、○、○、○、○、 ○、○、○、○、○、 ○、○、○、○、○、 という風に並べたいです。(○はすべて違う数字) どなたか分かる方ご教授よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
簡単なのは #2 さんの方法で、 例えば、こんな感じでしょうか。 http://melpon.org/wandbox/permlink/ou1SnFSMRwu6B6Tt 出力例: shuffled: [12, 1, 22, 9, 17, 23, 20, 24, 2, 14, 11, 25, 6, 18, 5, 15, 4, 3, 10, 13, 21, 16, 19, 8, 7] 12 1 22 9 17 23 20 24 2 14 11 25 6 18 5 15 4 3 10 13 21 16 19 8 7
その他の回答 (3)
- wormhole
- ベストアンサー率28% (1626/5665)
1. 1~25の25個の数字からランダムで1個取り出す。 2. 1.で取り出した数字を除いた24個の数字からランダムで1個取り出す。 3. 1. 2. で取り出した数字を除いた23個の数字からランダムで1個取り出す。 . . . 25. 最後の1個を取り出す。 26. 取り出した順に5個単位で分ける。
お礼
教えて頂きありがとうございます! この方法でも自分で考えてやってみたいと思います! ありがとうございました!
- Gotthold
- ベストアンサー率47% (396/832)
Listに1~25の数値を格納しておいて Collections.shuffleとかでシャッフルする。 No.1の存在チェックする方法は処理量が多くなるのでお勧めできない。 (でも、なんで良くないのか処理の流れ追って考えてみるのは面白いと思う。)
お礼
教えてくださいましてありがとうございます。 まだまだ勉強中ですので、また機会がありましたらよろしくお願いします!
- mayoke
- ベストアンサー率25% (16/62)
一旦配列に入れて、存在チェックしてからアウトプットするといいんじゃないですか? (1)乱数作成 (2)配列に存在するかチェック (3)存在しなければ配列に登録、存在すれば(1)に戻る (4)アウトプット (5)繰り返し
お礼
ベストアンサーは他の方にさせてもらったのですが、 すごい勉強になりました。 ありがとうございます!!
お礼
他のみなさんも丁寧に教えて頂けたのですが、 コードまで丁寧に教えて頂けたのでベストアンサーにしました。 すごい助かりました!! ありがとうございました!