Javaで5桁のint
配列を生成しようとしていますが、開始する場所に問題があります。配列内の数字のいずれも重複することはできません。私はそれのための乱数を生成することができますが、ちょうどカンニングは、お互いに数を比較し、任意の重複を置き換える方法を見つける。配列内の要素を重複して比較する
答えて
配列の代わりにjava.util.Setを使用すると、一意の要素のみを持つことが保証されます。
この試してください:あなたは(それはまた、それらをソートします)TreeSetのに配列を変換することにより、重複を取り除くことができ
int[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Random random = new Random();
int[] generateId() {
int[] clone = digits.clone();
int[] id = new int[5];
for (int i = 0; i < 5; i++) {
int candidate;
do {
candidate = random.nextInt(10);
} while (clone[candidate] == -1);
id[i] = clone[candidate];
clone[candidate] = -1;
}
return id;
}
を:
int numbers[] { 4 5 7 6 5 7 5 89 847 7 94 093 02 10 11 10 11 };
TreeSet set new TreeSet(Arrays.asList(numbers));
for (int no : set)
System.out.println(no);
私が正しくあなたを理解していれば、あなたは5桁のランダムな数字が必要ですが、数字は何も繰り返されません。
もしそうなら、数字のリストをシャッフルしてから、最初の5つの要素を選んでください。
EDIT
Integer[] digits = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Random random = new Random();
public Integer[] generateId() {
List<Integer> id = Arrays.asList(digits);
Collections.shuffle(id, random);
return id.subList(0, 5).toArray(new Integer[0]);
}
これはOでそれを生成する(桁数)、無内部ループ、ノーシャッフル< - 選択肢の数は、本当に大きな
int[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Random random = new Random();
int[] generateId() {
int[] choices = digits.clone();
int[] id = new int[5];
for (int i = 0; i < 5; i++) {
// one less choice to choose from each time
int index = random.nextInt(choices.length - i);
id[i] = choices[index];
// "remove" used item by replacing it with item at end of range
// because that index at the end won't be considered in next round
choices[index] = choices[choices.length - i - 1];
}
return id;
}
を取得する場合、これは高価になる可能性があります
代わりに、配列をソートしてそれを反復するだけです。
List<int> myList = new List<int>() { 1, 1, 2, 3, 4, 5, 5, 7 , 1, 7};
myList.Sort();
for (int i = myList.Count - 1; i > 0; i--)
{
if (myList[i] == myList[i - 1])
myList.RemoveAt(i);
}
もちろん、最初に重複を取得しないことをお勧めします。
まずは本当に感謝してくれた皆様に感謝します。
私はこのプログラムを私が望むやり方で動かすことができましたが、より簡単な方法があるはずです。ここに私がしたことがあります。それ以上のコメントはすばらしいでしょう。
do
{
for (int i = 0; i < 5; i++)
{
iNumber = generator.nextInt(9) + 1;
numbers[i] = iNumber;
}
}
while(numbers[0] == numbers[1] || numbers[0] == numbers[2] || numbers[0] == numbers[3] || numbers[0] == numbers[4] || numbers[1] == numbers[2] || numbers[1] == numbers[3] || numbers[1] == numbers[4] || numbers[2] == numbers[3] || numbers[2] == numbers[4] || numbers[3] == numbers[4]);
ちょうど乱数を生成し、それがサイズが5以下である間にSet
@sandman:SetはAFAIKという要素を返す順序についてSetが保証しないので、それが良いかどうかわかりません。 @ジョン:このスレッドでは少なくとも2つのクリーナーソリューションが提案されていますか? –
@sventek:番号を注文しなければならないことは分かりませんでしたか?その場合は、SortedSetを使用することをお勧めします。それはインサートをより高価にしますが、これはかなり良い解決策だと私はまだ信じています。 – Sandman
/**
* findDuplicate method return map where key is unique no and value as the
* repitation
*
* @param a
* : arrays of Objects
* @return map
*/
public Map findDuplicate(T[] a) {
Map<T, Integer> map = new HashMap<T, Integer>();
Set<T> unique = new HashSet<T>(Arrays.asList(a));
int count = 0;
for (T integer : unique) {
for (T integer1 : a) {
if (integer == integer1) {
++count;
}
}
map.put(integer, count);
count = 0;
}
return map;
}
- 1. 重複を含む配列要素の比較
- 2. 配列要素の比較
- 3. オブジェクトの配列を比較して重複を除去する
- 4. 配列内の各要素を互いに比較する
- 5. 配列内の要素を比較中にプログラムがクラッシュする
- 6. ある配列の要素と別の配列の要素を比較する
- 7. Xquery、配列内の要素を次の配列と比較する
- 8. リスト内の要素を比較する
- 9. 配列内に重複する要素を持つバイナリ検索
- 10. 2つの配列の要素を比較します
- 11. 重複配列を比較する方法
- 12. C - 配列内の要素と前のすべての要素を比較する
- 13. Python:配列と非配列の要素的な比較
- 14. スキャナの入力を配列の要素と比較する
- 15. 配列内の要素を数え、それらを比較する、javascript
- 16. 同じ文書内の配列の要素を比較するには?
- 17. 配列の要素を互いに比較する
- 18. 変数を配列の要素と比較する(Javaスクリプト)
- 19. 配列の要素を互いに比較する
- 20. 2次元配列の2要素を比較する
- 21. 配列やリストの要素をPythonでペアで比較する
- 22. X要素配列の重複
- 23. 、要素に2つの配列を比較し、ゼロ
- 24. ベクトル内の要素と文字列オブジェクトを比較する
- 25. 配列要素内のすべてのキーの重複した戻り値
- 26. 配列内の要素を比較し、要素の最大合計を見つける
- 27. キュートップを配列リスト要素と比較する
- 28. 配列要素の減算と比較に関するロジック
- 29. R比較重複
- 30. ノード配列のオブジェクト配列indexOfの重複要素を取得
あなたは '5桁のint配列' とはどういう意味ですか? –