Génération de 10 chiffres nombre aléatoire unique en Java
Je suis en train d'essayer avec code ci-dessous pour générer les 10 chiffres du nombre aléatoire unique. Comme pour mon req-je créer autour de 5000 numéros uniques(ids). Cela ne fonctionne pas comme prévu. Il génère également -cinq numéros. Aussi, parfois, un ou deux chiffres sont manquants dans le numéro généré résultant en 8 ou 9 numéros non 10.
public static synchronized List generateRandomPin(){
int START =1000000000;
//int END = Integer.parseInt("9999999999");
//long END = Integer.parseInt("9999999999");
long END = 9999999999L;
Random random = new Random();
for (int idx = 1; idx <= 3000; ++idx){
createRandomInteger(START, END, random);
}
return null;
}
private static void createRandomInteger(int aStart, long aEnd, Random aRandom){
if ( aStart > aEnd ) {
throw new IllegalArgumentException("Start cannot exceed End.");
}
//get the range, casting to long to avoid overflow problems
long range = (long)aEnd - (long)aStart + 1;
logger.info("range>>>>>>>>>>>"+range);
//compute a fraction of the range, 0 <= frac < range
long fraction = (long)(range * aRandom.nextDouble());
logger.info("fraction>>>>>>>>>>>>>>>>>>>>"+fraction);
int randomNumber = (int)(fraction + aStart);
logger.info("Generated : " + randomNumber);
}
source d'informationauteur RajaShanmugam
Vous devez vous connecter pour publier un commentaire.
Je pense que la raison pour laquelle vous obtenez 8/9 les valeurs numériques et les nombres négatifs, c'est que vous êtes en train d'ajouter
fraction
unlong
(signé de 64 bits de valeur) qui peut être plus grand que le positifint
gamme (valeur de 32 bits) àaStart
.La valeur est débordant tels que
randomNumber
est dans le négatif de la plage 32 bits ou a presque enroulé autour deaStart
(depuisint
est signé 32 bits valeur,fraction
aurait seulement besoin d'être un peu moins de (2^32 -aStart
) pour vous de voir 8 ou 9 chiffres de valeurs).Vous devez utiliser
long
pour toutes les valeurs.Si vous souhaitez une longueur fixe de nombre aléatoire de 10 digits? Cela peut être fait plus facile:
Noter que 10 chiffres sur
Integer.MAX_VALUE
ne rentre pas dans unint
d'où lelong
.Je ne sais pas pourquoi personne n'a réalisé qu'mais je pense que le point est de générer de "l'unique" nombre aléatoire dont je suis aussi en train d'essayer de le faire. J'ai réussi à générer les 11 chiffres de nombre aléatoire, mais je ne suis pas sûr de la façon de générer des numéros uniques. Aussi mon approche est un peu différente. Dans cette méthode, je suis en ajoutant le numéro de caractères les uns à côté des autres avec une boucle for. Puis en retournant le numéro de long.
C'est une méthode utilitaire pour la génération d'une longueur fixe de nombre aléatoire.
Peut-être que vous êtes à la recherche pour celle-ci:
Vous pouvez simplement mettre cela à l'intérieur d'une boucle.
c'est pour le nombre aléatoire à partir de 1 et 2 (10 chiffres).
espérons que cela fonctionne.
Salut vous pouvez utiliser la méthode suivante pour générer les 10 chiffres de nombre aléatoire