Я создаю случайное число от 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
Michel Tamer 6 Апр 2014 в 05:22
Ну, первые два эквивалентны (за исключением скобок с несоответствием) и возвращают целое число от 0 до 99 включительно, а второе возвращает целое число от 1 до 100 включительно.
 – 
Vortico
6 Апр 2014 в 05:26
 – 
guido
6 Апр 2014 в 05:27
1
Это не дубликат, он спрашивает какой из них правильный и/или логика каждого
 – 
Frakcool
6 Апр 2014 в 05:30
Этот вопрос означает «В чем разница между ((100-1)+1) и 100?» и «Какая разница в добавлении 1 к выражению?». Я бы хотел, чтобы некоторые вопросы о переполнении стека были более продуманными.
 – 
Dawood ibn Kareem
6 Апр 2014 в 05:50

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.

5
Mdev 6 Апр 2014 в 05:38

Я рекомендую вам использовать 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). Также обратите внимание, что вы можете сохранить свою «случайную» ссылку, чтобы избежать дорогостоящей (и, возможно, небезопасной) повторной инициализации.

3
Elliott Frisch 6 Апр 2014 в 05:32

Первый эквивалентен второму. Оба будут давать случайное целое число от 0 до 99 (включительно, потому что Math.random() возвращает double в диапазоне [0, 1)). Обратите внимание, что (100-1)+1 эквивалентно 100.

Третье, даст целое число от 1 до 100, потому что вы добавляете 1 к результату выше, то есть 1 плюс значение в диапазоне [0, 100) , в результате получается диапазон [1, 101).

1
Christian Tapia 6 Апр 2014 в 05:37