Почему Math.random () * 10 (int) не генерирует 10 в Java? - PullRequest
5 голосов
/ 22 июня 2010

Почему следующие значения составляют от 0 до 9, а не от 10?

Насколько я понимаю, Math.random () создает число от 0 до менее 1,0.

Таким образом, он может выдавать 0,99998, который10 на * 10, не так ли?

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

Ответы [ 8 ]

18 голосов
/ 22 июня 2010

Приведение double к int в Java выполняет целочисленное усечение. Это означает, что если ваше случайное число равно 0.99987, то умножение на 10 дает 9.9987, а усечение целых - 9.

14 голосов
/ 22 июня 2010

Из математического Javadoc:

"псевдослучайный дубль больше или равно 0,0 и меньше 1,0"

1.0 не является возможным значением с Math.random. Таким образом, вы не можете получить 10. И (int) 9.999 дает 9

2 голосов
/ 22 июня 2010

Причина (Math.random () * 10 округляется с использованием int () , поэтому int (9.9999999) приводит к 9 .

1 голос
/ 22 июня 2010

Поскольку (int) округляется.
(int)9.999 приводит к 9. // целочисленное усечение

0 голосов
/ 21 января 2018

Вы можете добавить 1 к уравнению, так что результат будет от 1 до 10 вместо 0 до 9, например:

int targetNumber = (int) (Math.random()* 10+1);
0 голосов
/ 03 апреля 2016

Вы всегда можете добавить +1 к концу команды, что позволит ей добавить 1 к сгенерированному числу.Итак, у вас будет что-то вроде этого:

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

Это будет генерировать любое целое число от 1 до 10.

Если вы хотите любое целое число от 0 до 10, вы можете сделать это:

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

Надеюсь, это поможет!

0 голосов
/ 26 июля 2015

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

Теперь вы получаете целое число от 1 до 10, включая число 10.

0 голосов
/ 23 июня 2010

0.99987, который становится 10 на * 10

Не когда я пошел в школу. Становится 9.9987.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...