2017-09-29 3 views
-3

pour l'une de mes missions J'essaie de générer un nombre aléatoire entre 16 et 26 (les deux inclus). J'ai lu et essayé différentes méthodes, mais pour une raison quelconque, il dépasse la plage spécifiée. C'est ce que j'ai pour le moment:Vous essayez d'obtenir une valeur aléatoire dans la plage spécifiée?

int dealerHand = 16 + (int) (Math.random() * ((26 - 16) + 16)); 

Une idée sur pourquoi cela ne fonctionne pas? Merci!

+0

Cela doit avoir demandé un million de fois ... Merci – Henry

Répondre

0

((26 - 16) + 16) est le même que si (26 + (-16 + 16)26 + 0, maintenant le problème devrait être plus évident:

int dealerHand = 16 + (int) (Math.random() * 26); 

qui retourne un nombre entre 16 et 42.

Ce que vous devez faire est plus proche de celle-ci:

int dealerHand = 16 + (int) (Math.random() * (26 - 16)); 

Mais attention à la documentation de Math.random(): le nombre de retour est >= 0.0 et < 1.0. Ce qui signifie que ce code générerait des nombres dans la plage [16;26) (c'est-à-dire 26 n'est pas inclus). Comme vous voulez inclure c'est la vraie formule:

int dealerHand = 16 + (int) (Math.random() * (26 - 16 + 1)); 
+0

, a été mise à jour la réponse à cette question. – MondKin

0

Essayez ceci:

Random r = new Random(); 
int dealerHand = 16 + r.nextInt(11);