Я просто скажу, что не так с решениями, представленными в вопросе и почему ошибки.
Решение 1:
randomNum = minimum + (int)(Math.random()*maximum);
Проблема: randomNum присваиваются значения чисел, превышающие максимальные.
Объяснение: Предположим, что наш минимум равен 5, а ваш максимум равен 10. Любое значение от Math.random()
больше 0,6 заставит выражение оценить значение 6 или больше, а добавление 5 сделает его больше 10 (ваш максимум). Проблема в том, что вы умножаете случайное число на максимум (который генерирует число, почти равное максимуму), а затем добавляете минимум. Если минимум не равен 1, это не правильно. Вы должны переключиться на, как указано в других ответах
randomNum = minimum + (int)(Math.random()*(maximum-minimum+1))
+1 означает, что Math.random()
никогда не вернет 1.0.
Решение 2:
Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum = minimum + i;
Ваша проблема в том, что «%» может возвращать отрицательное число, если первый член меньше 0. Поскольку rn.nextInt()
возвращает отрицательные значения с вероятностью ~ 50%, вы также не получите ожидаемый результат.
Это, однако, было почти идеально. Вам просто нужно было посмотреть немного дальше вниз по Javadoc, nextInt (int n) . С помощью этого метода, делая
Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt(n);
randomNum = minimum + i;
Также вернет желаемый результат.