Случайное число Java

Вопрос новичка здесь: я попытался создать случайное число, используя этот код

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

Тем не менее, я продолжал получать 0 в качестве ответа при печати на экране

только после круглых скобок

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

правильно ли показывал номер. Может кто-нибудь объяснить логическую причину этого, что я пропустил?

5 ответов

Решение

Код

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

эквивалентно

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

Так что ценность Math.random() превращается в int, Поскольку это значение находится в диапазоне от 0 до 1 (1 исключено), оно всегда конвертируется в ноль.

Так

(int) Math.random()*10 -->  ((int) Math.random()) * 10 --> 0 * 10 --> 0

Когда ты пишешь int rand = (int) Math.random()*10ты на самом деле пишешь:

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

Поэтому вы получаете 0, потому что случайное число находится в диапазоне от 0 до 1, и приведение его к int делает его равным 0.

Math.random() возвращает double число от 0 до 1 исключающее, что означает (int)Math.random() всегда будет 0 (так как Math.random() < 1). Чтобы выполнить умножение перед приведением к int, вы должны использовать круглые скобки, как и раньше.

Другие ответы уже объяснили проблему с вашим кодом, так что я не буду больше обсуждать эту тему здесь.

Это просто примечание о генерации случайных чисел:
Рекомендуемый способ генерации случайных чисел в Java не Math.random(), но через java.util.Random класс ( http://docs.oracle.com/javase/7/docs/api/java/util/Random.html).

Чтобы сгенерировать случайное число, как в приведенном выше примере, вы можете использовать этот код:

Random rnd = new Random();
int i = rnd.nextInt(10);

, который даст тот же результат, что и ваш код.

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

эквивалентно

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

Учитывая, что Math.random() возвращает число от 0<=N<1, если вы попытаетесь разыграть его, вы всегда получите 0, это умножение на 10 все еще равно 0

int rand = ((int) Math.random()); -- ALWAYS --> ZERO

0*N ---- ALWAYS ---> ZERO
Другие вопросы по тегам