2010-06-22 5 views
4

Pourquoi les produits suivants entre 0 et 9 et non 10?Pourquoi does (int) Math.random() * 10 produit 10 en Java?

Ma compréhension est Math.random() créer un nombre compris entre 0 et moins de 1.0. Donc, il peut produire 0,99987 qui devient 10 par 10, n'est-ce pas?

int targetNumber = (int) (Math.random()* 10); 
+0

Vous devez utiliser Random.nextInt() pour obtenir « meilleur » au hasard numéros de toute façon: http://stackoverflow.com/questions/738629/math-random-versus-random-nextintint/738651#738651 – Goibniu

Répondre

17

Coulée double à int en Java est une troncation d'entier. Cela signifie que si votre numéro aléatoire est 0,99987, puis en multipliant par 10 donne 9,9987, et troncature entier donne 9.

2

cause (Math.random() * 10 obtient arrondi à l'aide int(), donc int (9,9999999) cède .

1

Parce que (int) arrondit.
(int)9.999 donne en 9. // tronçon entier

+1

Il ya une faute de frappe, (int) 0,999 résultats en 0 – pgras

+0

Tout à fait ainsi. Merci. – Kobi

14

De la javadoc Math:

« un pseudo-aléatoire le double supérieur ou égal à 0,0 et inférieur à 1,0 "

1.0 n'est pas une valeur posible avec Math.random. vous ne pouvez donc pas obtenir 10. Et (int) 9,999 donne 9

0

0,99987 qui devient 10 par * 10

Pas quand je suis allé à l'école. Il devient 9.9987.

0

Math.floor (Math.random() * 10) + 1

Maintenant, vous obtenez un nombre entier compris entre 1 et 10, y compris le numéro 10.

0

Vous pouvez toujours virer de bord sur un +1 à la fin de la commande, lui permettant d'ajouter 1 au nombre généré. Donc, vous auriez quelque chose comme ceci:

int randomnumber = ((int)(Math.random()*10) +1); 

Cela générerait tout entier entre 1 et 10.

Si vous vouliez tout entier compris entre 0 et 10, vous pouvez le faire:

int randomnumber = ((int)(Math.random()*11) -1); 

Espérons que cela aide!

0

vous pouvez ajouter 1 à l'équation de sorte que la sortie sera de 1 à 10 au lieu de 0 à 9 comme ceci:

int targetNumber = (int) (Math.random()* 10+1);