# 6stellige Zufallszahlen erzeugen & auf einzigartigkeit prüfen



## lucksn (25. Okt 2013)

Hallo Forum,

für eine zu programmierende TAN-Liste sollen wir 100 verschiedene, 6 stellige TANS erstellen und diese dann in einer ArrayList speichern.
Die TANs dürfen nur einmalig vorkommen und MÜSSEN 6 stellig sein.

Wie erstelle ich bestenfalls eine 6stellige Zufallszahl.
Meine erste Idee war eine Zahl zwischen 100000-999999 zu erstellen, jedoch führt dies öfter zu Endlosschleifen durch die if Abfragen ob die zufallsZahl < 100000 oder > 999999 ist.

Über Hilfe wäre ich sehr dankbar...

Die TANS sollen in der Klasse ArrayList erstellt werden und jede Tan ein einzelnes Objekt der Klasse Tan (mit den Attributen tanWert (= 6 stellige Zahl) und tanStatus ("unverbraucht") ) instanzieren...
Per Methodenaufruf sollen die 100 erstellten TANs dann in die ArrayList eingetragen werden..


----------



## geqoo (25. Okt 2013)

Die zahlen kannst du mit Random erzeugen.
Da diese dann aber nur von 0 bis 899999 gehen, wendet man einfach den Trick an, noch 100.000 drauf zu addieren. Dann ist die erste Zahl in jedem Fall immer 6-stellig und die letzte auch (999999).


```
Random randomGenerator = new Random();

int randInt = randomGenerator.nextInt(900000) + 100000;
```

Jetzt brauchst du noch eine Liste, wo du die Werte hinein speicherst. Entweder du baust dir eine Vergleichsmethode, ob es die Nummer schon gibt oder du verwendest statt der ArrayList ein Set, z.B. ein HashSet. Dann kannst du mit einer Schleife prüfen, ob du schon genug Einträge hast.


----------



## Ying Yang (25. Okt 2013)

geqoo hat gesagt.:


> Die zahlen kannst du mit Random erzeugen.
> Da diese dann aber nur von 0 bis 899999 gehen, wendet man einfach den Trick an, noch 100.000 drauf zu addieren. Dann ist die erste Zahl in jedem Fall immer 6-stellig und die letzte auch (999999).



Koenntest du erklaeren warum das der Fall ist, wenn man 100.000 addiert?


----------



## Ikaron (25. Okt 2013)

Das ist ganz einfach. Random.nextInt(x) gibt eine Zufallszahl zwischen 0 und x-1 inklusive zurück. Also mindestens 0. Wenn nun 100.000 konstant addiert wird, ist die kleinstmögliche Zahl 100.000 + 0 = 100.000. Die größtmögliche Zahl für x = 900.000 ist 899.999, somit ist 899.999 + 100.000 = 999.999.
Daraus folgt: Die Ergebnisse liegen zwischen 100.000 und 999.999.


----------

