Génération de nombres aléatoires en Java

Génération d'une série de nombres aléatoires est l'une de ces tâches courantes qui surviennent de temps en temps. Dans Java, cela peut être réalisé simplement en utilisant java.util. Classe aléatoire.

La première étape, comme avec l'utilisation de toute API classe, consiste à placer l'instruction import avant le début de votre classe de programme:

Ensuite, créez un objet aléatoire:

L'objet Random vous fournit un simple générateur de nombres aléatoires. Les méthodes de l'objet permettent de choisir des nombres aléatoires. Par exemple, les méthodes nextInt () et nextLong () renverront respectivement un nombre compris dans la plage de valeurs (négatives et positives) des types de données int et long:

Les nombres renvoyés seront choisis aléatoirement des valeurs int et longues:

Choisir des nombres aléatoires dans une certaine plage

Normalement, les nombres aléatoires à générer doivent provenir d'une certaine plage (par exemple, entre 1 et 40 inclusivement). À cet effet, la méthode nextInt () peut également accepter un paramètre int. Il indique la limite supérieure de la plage de nombres. Cependant, le nombre limite supérieur n'est pas inclus comme l'un des nombres pouvant être sélectionnés. Cela peut sembler déroutant, mais la méthode nextInt () fonctionne de zéro vers le haut. Par exemple:

instagram viewer

ne choisira qu'un nombre aléatoire de 0 à 39 inclusivement. Pour choisir dans une plage commençant par 1, ajoutez simplement 1 au résultat de la méthode nextInt (). Par exemple, pour choisir un nombre compris entre 1 et 40 inclusivement, ajoutez-en un au résultat:

Si la plage commence à partir d'un nombre supérieur à un, vous devrez:

  • moins le nombre de départ du nombre limite supérieure, puis ajoutez-en un.
  • ajoutez le numéro de départ au résultat de la méthode nextInt ().

Par exemple, pour choisir un nombre de 5 à 35 inclusivement, le nombre limite supérieur sera 35-5 + 1 = 31 et 5 doit être ajouté au résultat:

À quel point la classe aléatoire est-elle aléatoire?

Je dois souligner que la classe Random génère des nombres aléatoires de manière déterministe. L'algorithme qui produit l'aléatoire est basé sur un nombre appelé graine. Si le nombre de graines est connu, il est possible de déterminer les nombres qui vont être produits à partir de l'algorithme. Pour le prouver, je vais utiliser les chiffres de la date Neil Armstrong a d'abord marché sur la Lune comme numéro de semence (20 juillet 1969):

Peu importe qui exécute ce code, la séquence de nombres "aléatoires" produits sera:

Par défaut, le numéro de départ utilisé par:

est l'heure actuelle en millisecondes depuis le 1er janvier 1970. Normalement, cela produira des nombres suffisamment aléatoires pour la plupart des applications. Cependant, notez que deux générateurs de nombres aléatoires créés dans la même milliseconde généreront les mêmes nombres aléatoires.

Soyez également prudent lorsque vous utilisez la classe Random pour toute application qui doit avoir un générateur de nombres aléatoires sécurisé (par exemple, un programme de jeu). Il peut être possible de deviner le numéro de départ en fonction de l'heure d'exécution de l'application. Généralement, pour les applications où les nombres aléatoires sont absolument critiques, il est préférable de trouver une alternative à l'objet Random. Pour la plupart des applications où il doit juste y avoir un certain élément aléatoire (par exemple, les dés pour un jeu de société), cela fonctionne bien.

instagram story viewer