2016-08-25 2 views
-2

Я не знаю, почему дизайнеры в Java не проектировал объекты java.util.Random возвращать случайные числа, как это:Как указать диапазоны для java.util.Random?

rand.nextInt(minValue, maxValue);

Я не понимаю, как пройти минимум и максимум значения этого функция. Я видел это рекомендуется:

random.nextInt(max + 1 - (min)) + min

, но что это значит? Значит ли это:

random.nextInt(FULL_RANGE + 1) + START_OF_RANGE

Например, если бы я хотел, чтобы генерировать значения от -1 до 1 включительно, это как я это делаю:

int oneOfThreeChoices = rand.nextInt(1 + 1 + 1) - 1;

+0

Что касается «что это значит»: 'max - min + 1' - это размер диапазона. Например, если вам нужны значения в диапазоне '[1, 4]', тогда вы хотите 4 разных значения (1, 2, 3, 4) - это '4 - 1 + 1'. Теперь, поскольку аргумент arg to nextInt является исключительным, вы хотите передать его 4. Это получает значения в {0, 1, 2, 3}, так что независимо от того, что вы получите, вы просто сдвигаете его на 1 (т. Е. min'), чтобы получить значения в {1, 2, 3, 4}. – yshavit

+0

Ответ, связанный модами, является гораздо более сложным вопросом. Главный ответ не имеет значения. Как это полезно? Это мне не помогает. –

+0

Как это не имеет значения? Насколько я могу судить, ваш вопрос в основном «как я могу генерировать случайный int в заданном диапазоне min/max?» Если это ваш вопрос, связанный дубликат отвечает на него, и мой комментарий здесь даже немного объясняет это на примере. Если это не ваш вопрос, что это? – yshavit

ответ

3

API-интерфейс обеспечивает достаточное инструменты для выполнения этой задачи. Если вы хотите случайный Int на интервале [а, Ь], включительно на обоих концах, используйте

int n = random.nextInt(b-a+1) + a 

при условии, что random является объектом ранее объявлен типа java.util.Random.

1

random.nextInt(bound) возвращает случайное число от 0 до bound (только). Например random.nextInt(10) возвращает случайное число от 0 до 9.

Итак, если вы хотите, чтобы вернуть число от 5 до 15 (включительно) просто сказать

random.nextInt(11) + 5 

Почему дизайнеры ява не включили более удобный API для JDK ? Я думаю, потому что объясненный здесь путь довольно прост и очевиден.

Смежные вопросы