Я пытаюсь создать 1000 случайных чисел от 13 до 100. До сих пор он генерировал только 75% того, что я хочу, в тысячу раз. Вот что у меня есть до сих пор:
Random rand = new Random();
for (int j = 0; j < 1000; j++)
{
int pick = rand.nextInt((87) + 13);
pick++;
}
Почему он не работает?
Обратите внимание на nextInt()
, охватывающий 0 включительно и заданное значение исключительно! Таким образом, это должно быть rand.nextInt(88)
чтобы сделать наивысший int
сгенерированным 87. Вот что вы хотите:
Random rand = new Random();
for (int j = 0; j<1000; j++)
{
int pick = rand.nextInt(88)+13;
}
nextInt(88)
.
rand.nextInt(88) + 13;
должен давать вам цифры от 13 до 100, и вы просто помещаете их в свою петлю.
.nextInt(88)
Линия:
До сих пор он только генерировал 75% того, что я хочу многократно в тысячу раз
На самом деле это не так. Возможно, это проблема с посевкой. Обязательно всегда повторно забирайте случайное число, используя время.
Но я согласен с Абдулом, вам нужно взять +13
из этой круглой скобки:
rand.nextInt(87) + 13;
Поскольку rand.nextInt((87) + 13)
совпадает с rand.nextInt((67) + 23)
как rand.nextInt((1) + 99)
Но если вы хотите больше "истинной" случайности, посмотрите на то, что называется buzzhash (хотя это для хэширования, но может быть изменено для числа)
Я использую это в своих кодах:
public static int randomInteger(int min, int max)
{
java.security.SecureRandom rand = new java.security.SecureRandom();
//get bounded [0, max) from nextInt()
int randomNum = rand.nextInt(max) + min;
return randomNum;
}
value = randomInteger(13,100); //13..99
value = randomInteger(13,101); //13..100
rand.nextInt((87)+13)
совпадает сrand.nextInt(100)
...nextInt((87)+13)