Случайное число 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