Как создать случайное целое число от min до max в java?
Какой метод возвращает случайный int между min и max? Или такой метод не существует?
Я ищу что-то вроде этого:
NAMEOFMETHOD (min, max)
(где min и max int
s)
который возвращает soemthing следующим образом:
8
(случайным образом)
Если такой метод существует, можете ли вы сослаться на соответствующую документацию с ответом. Благодарю.
Обновление: попытка реализовать полное решение в следующем ответе у меня есть:
class TestR
{
public static void main (String[]arg)
{
Random random = new Random() ;
int randomNumber = random.nextInt(5) + 2;
System.out.println (randomNumber) ;
}
}
Я по-прежнему получаю те же ошибки от complier:
TestR.java:5: cannot find symbol
symbol : class Random
location: class TestR
Random random = new Random() ;
^
TestR.java:5: cannot find symbol
symbol : class Random
location: class TestR
Random random = new Random() ;
^
TestR.java:6: operator + cannot be applied to Random.nextInt,int
int randomNumber = random.nextInt(5) + 2;
^
TestR.java:6: incompatible types
found : <nulltype>
required: int
int randomNumber = random.nextInt(5) + 2;
^
4 errors
Что здесь происходит?
Ответы
Ответ 1
Построить случайный объект при запуске приложения:
Random random = new Random();
Затем используйте Random.nextInt(int):
int randomNumber = random.nextInt(max + 1 - min) + min;
Обратите внимание, что нижний и верхний пределы включены.
Ответ 2
Вы можете использовать Random.nextInt(n). Это возвращает случайный int в [0, n). Просто используя max-min + 1 вместо n и добавив min в ответ, вы получите значение в нужном диапазоне.
Ответ 3
public static int random_int(int Min, int Max)
{
return (int) (Math.random()*(Max-Min))+Min;
}
random_int(5, 9); // For example
Ответ 4
Поскольку решения, приведенные выше, не учитывают возможное переполнение выполнения max-min
когда min
отрицательно, здесь другое решение (аналогичное керуаку)
public static int getRandom(int min, int max) {
if (min > max) {
throw new IllegalArgumentException("Min " + min + " greater than max " + max);
}
return (int) ( (long) min + Math.random() * ((long)max - min + 1));
}
это работает, даже если вы называете это с:
getRandom(Integer.MIN_VALUE, Integer.MAX_VALUE)
Ответ 5
Использование класса Random - это способ, предложенный в принятом ответе, но здесь это менее правильный путь, если вы не хотите создавать новый случайный объект:
min + (int) (Math.random() * (max - min + 1));
Ответ 6
С Java 7 или выше вы можете использовать
ThreadLocalRandom.current().nextInt(int origin, int bound)
Javadoc: ThreadLocalRandom.nextInt
Ответ 7
Это генерирует случайное целое число размером psize
public static Integer getRandom(Integer pSize) {
if(pSize<=0) {
return null;
}
Double min_d = Math.pow(10, pSize.doubleValue()-1D);
Double max_d = (Math.pow(10, (pSize).doubleValue()))-1D;
int min = min_d.intValue();
int max = max_d.intValue();
return RAND.nextInt(max-min) + min;
}
Ответ 8
import java.util.Random;