Я создаю случайное число от 1 до 100, я смотрел некоторые вопросы по Stackoverflow, чтобы найти правильный путь, и меня смутило множество разных предложений. В чем разница между использованием этого:
int random= (int)(Math.random()*((100-1)+1));
Этот:
int random= (int)(Math.random()*(100);
И это:
int random= 1+ (int)(Math.random()*((100-1)+1));
3 ответа
int random = (int)(Math.random()*(x);
Это устанавливает random
равным любому целому числу от 0
до x - 1
.
int random = 1 + (int)(Math.random()*(x);
Добавление 1
к общему выражению просто меняет его на любое целое число от 1
до x
.
(int)(Math.random()*((100-1)+1))
Является избыточным и эквивалентным
(int)(Math.random()*(100)
Обратите внимание:
1 + (int)(Math.random()*(x)
возвращает int
в любом месте от 1
до x + 1
Но
(int)(Math.random()*(x + 1)
возвращает int
в любом месте от 0
до x + 1
.
Я рекомендую вам использовать Random и nextInt (100) как так,
java.util.Random random = new java.util.Random();
// 1 to 100, the 100 is excluded so this is the correct range.
int i = 1 + random.nextInt(100);
У него есть дополнительное преимущество, заключающееся в возможности замены на более безопасный генератор случайных чисел (например, SecureRandom). Также обратите внимание, что вы можете сохранить свою «случайную» ссылку, чтобы избежать дорогостоящей (и, возможно, небезопасной) повторной инициализации.
Первый эквивалентен второму. Оба будут давать случайное целое число от 0
до 99
(включительно, потому что Math.random()
возвращает double
в диапазоне [0, 1)
). Обратите внимание, что (100-1)+1
эквивалентно 100
.
Третье, даст целое число от 1
до 100
, потому что вы добавляете 1
к результату выше, то есть 1
плюс значение в диапазоне [0, 100)
, в результате получается диапазон [1, 101)
.
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
((100-1)+1)
и100
?» и «Какая разница в добавлении 1 к выражению?». Я бы хотел, чтобы некоторые вопросы о переполнении стека были более продуманными.