- 締切済み
数字が重ならないようにするには
Javaを始めたばかりなのでわからない事だらけですが、よろしくお願いします。 早速、質問ですが 要素数5の配列を用意して、そこにランダムに数字を入れていきます。 ですが、数字が一つもかぶらないように数字を入れたいのですが、どうしたらいいのか良くわかりません。 なにか数字がかぶらない様にする方法はありますでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- momozange
- ベストアンサー率67% (21/31)
キーワードは int配列、if文、for文、java.util.Random です。 わからないで質問しているかと思いますが、質問文にほとんど回答があります。 1.要素数5の配列を用意 2.ランダムに数字を入れていく(繰り返し:for文) 3.しかし、数字がかぶらないように入れたい(if文) まずは「3.」の条件がない配列を作成することから始めるとよいです(重複ありランダムの数値配列を作成する) この時点でなにか躓いたら再度質問してみてください。 また、以下のような方法もあります。 この内容がわかるようになれば、初心者は脱出かもしれません。 # JDK1.5以上 List array = new ArrayList(); array.add(0); array.add(1); array.add(2); array.add(3); array.add(4); array.add(5); array.add(6); array.add(7); array.add(8); array.add(9); Collections.shuffle(array); array = array.subList(0, 5); System.out.print(">" + array);
こんにちは、 おそらくなんらかのランダム数字生成関数を利用していると思われますが、ランダムという性質上、同じ数字が生成される可能性も多々あります。用意した配列に全て異なる数字をランダム関数を利用して格納したい場合は、新しく生成されたランダム数を格納する前に、配列内の既に格納された数字と比較し、全て異なっていれば格納する、というプログラムにする必要があるでしょう。 または、ランダム関数の引数(引数を取るランダム関数が準備されているはずです)を変えると(seedと言ったりします)生成されるランダム変数のパターンが異なりますので、異なった数字が生成される確立は上がりますが、保証の限りではありません。やはり配列内の数字を1つ1つチェックするというのがオーソドックスではありますが、確実かと思います。要素数が5でも、5000でも、LOOPとIF文を利用することで、プログラムのコード量は変わりませんが、要素数が増えると比較の対象が増えるので、実行時間は長くなります。 コード例はあえて示しません。試行錯誤で試してみてください。 では
お礼
回答ありがとうございました。 参考にさせて頂きたいと思います。 はい。自分でなやんでいろいろと試行錯誤を繰り返して、プログラムを完成させたいとおもいます。 ありがとうございました。
- kuruthiusu
- ベストアンサー率15% (10/65)
Setがいいのではないでしょうか。 Setは重複する要素は追加されません。
お礼
ありがとうございます。 参考URLを元にがんばって勉強し、使えるようになりたいと思います。 ありがとうございました。
お礼
ありがとうございます。 掲載していただいたプログラムを解読して、自分でプログラムを関せさせて初心者脱出をしたいと思います。 ありがとうございました。