Ich versuche, ein 5-stelliges int
-Array in Java zu generieren und habe Probleme beim Start. Keine der Zahlen im Array kann Duplikate sein. Ich kann Zufallszahlen dafür erzeugen, aber ich kann einfach nicht herausfinden, wie man die Zahlen miteinander vergleicht und Duplikate ersetzt.Vergleichen Sie Elemente in einem Array für Duplikate
Antwort
Sie können ein java.util.Set anstelle eines Arrays verwenden, da es garantiert nur eindeutige Elemente enthält.
versuchen Sie dies:
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;
}
Sie können durch die Umwandlung der Anordnung in eine TreeSet der Duplikate loswerden (das wird sie auch sortieren):
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);
Wenn ich Sie richtig verstehe, Sie Willst du eine zufällige 5-stellige Nummer, ohne wiederholte Zahl?
Wenn ja, besteht eine Möglichkeit darin, eine Liste der Ziffern 0-9 zu mischen und dann die ersten 5 Elemente auszuwählen.
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]);
}
dies erzeugt es in O (Anzahl der Stellen), keine inneren Schleifen, keine schlurfenden < - dies teuer sein könnte, wenn die Anzahl der Entscheidungen wirklich groß wird
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;
}
Als Alternative, einfach das Array sortieren und iterieren.
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);
}
Aber natürlich ist es am besten, keine Duplikate zu bekommen, um damit zu beginnen.
Zunächst möchte ich Ihnen allen danken, dass Sie mir geholfen haben.
Ich habe dieses Programm so, wie ich will, aber es scheint, als sollte es einen einfacheren Weg geben. Hier ist was ich getan habe. Noch mehr Kommentare wären toll.
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]);
Schauen Sie, erzeugen Sie einfach Zufallszahlen und setzen Sie sie in ein Set
@sandman: Ich weiß nicht, ob das eine gute Idee ist, da Set gibt keine Garantien über die Reihenfolge gibt es Elemente AFAIK zurück. @ John: Es gibt mindestens zwei sauberere Lösungen in diesem Thread vorgeschlagen? –
@sventek: Ich habe nicht bemerkt, dass die Nummern bestellt werden müssen? In diesem Fall empfehle ich, ein SortedSet zu verwenden. Es macht Einfügungen teurer, aber ich glaube immer noch, dass dies eine ziemlich gute Lösung ist. – 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. Vergleichen Sie zwei Array-Elemente
- 2. Vergleichen Sie zwei Array für fehlende Elemente in Ruby
- 3. Entfernen Sie alle Elemente, die Duplikate in Array haben Javascript
- 4. Kombination Duplikate in einem Array
- 5. Elemente in einem Array zählen und vergleichen, Javascript
- 6. Vergleichen Sie 2 Array-Inhalte in Ruby
- 7. Entfernen Duplikate mit benutzerdefinierten Vergleichen
- 8. So entfernen Sie Duplikate in einem Array von Arrays Ruby
- 9. So sortieren Sie Elemente in einem Array
- 10. Multiplizieren Sie bestimmte Elemente in einem Array
- 11. Überprüfen Sie eine Zeichenfolge für alle Elemente in einem Array
- 12. Entfernen Duplikate in einem Array-Objekt
- 13. Entfernen Sie alle aufeinanderfolgenden Duplikate in einem Zeichenfolgenarray
- 14. Wie funktioniert Rubys Array? | Elemente für Gleichheit vergleichen?
- 15. Zählen Elemente in einem Array
- 16. Holen Sie alle Array-Elemente in einem Array mongodb + node.js
- 17. Vergleichen Sie zwei Spalten in Excel und Duplikate entfernen
- 18. wie Duplikate in einem Integer-Array entfernen? mit Java
- 19. Eindeutiges Element zurückgeben, das keine Duplikate in einem Array hat
- 20. Vergleichen Sie alle Wertepaare in einem Wörterbuch
- 21. Entfernen Duplikate aus einem Array von Objekten
- 22. Ramda: Objekte aus dem Array erhalten, indem in einem anderen Array mit jedem Elemente zu vergleichen
- 23. Duplikate ersetzen in Array von Strings
- 24. Versuchen Sie, Schlüssel in einem Array von Objekten zu vergleichen
- 25. Vergleichen Sie Zeichen mit Array
- 26. VBA, entfernen Sie Duplikate aus Array
- 27. PHP verschiebe Duplikate im rekursiven Array
- 28. Erstellen von Objekten für bestimmte Elemente in einem 3D-Array
- 29. Vergleichen Array-Werte in mit cypher/neo4j
- 30. Wie die Duplikate in einem Array finden jquery mit
was meinst du mit '5-stellige int array'? –