2010-06-22 2 views
4

Почему следующие продукты между 0 - 9 и не 10?Почему нет (int) Math.random() * 10 произвести 10 в Java?

Мое понимание - Math.random() создать число от 0 до менее 1.0.

Таким образом, он может производить 0.99987, что составляет 10 на * 10, не так ли?

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

Вы должны использовать Random.nextInt(), чтобы получить «лучше» случайный номера в любом случае: http://stackoverflow.com/questions/738629/math-random-versus-random-nextintint/738651#738651 – Goibniu

ответ

17

Кастинг a double до int в Java выполняет целочисленное усечение. Это означает, что если случайное число 0,99987, умноженное на 10 дает 9,9987, и целое усечение дает 9.

2

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

1

Поскольку (int) раундов вниз.
(int)9.999 Результаты 9. 9.// целочисленное усечение

+1

Существует опечатка, (int) 0.999 результатов в 0 – pgras

+0

Совершенно верно. Благодарю. – Kobi

14

Из Math документацию:

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

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

0

0.99987, который станет 10 по 10 *

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

0

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

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

0

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

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

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

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

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

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

0

вы можете добавить 1 к уравнению, поэтому выход будет от 1 до 10, а не от 0 до 9 так:

int targetNumber = (int) (Math.random()* 10+1); 
Смежные вопросы