Как сгенерировать случайное число в Java
При разработке приложений программист нередко нуждается в генерации случайных (рандомных) чисел. В Java существует два класса для реализации этой цели — java.lang.Math и java.util.Random. Но способов сгенерировать числа может быть несколько. Основные из них мы рассмотрим ниже.
Особенности генерации случайных чисел в Java 8
Java 8 содержит новый метод класса java.util.Random — ints(). Он отвечает за возвращение неограниченного потока псевдослучайных значений int. Благодаря ему можно задать численный диапазон, выбрав максимальные/минимальные значения.
Приведем пример использования этого метода для получения рандомных чисел в указанном диапазоне:
publicstaticintgetRandomNumberInts(intmin, intmax){
Randomrandom = newRandom();
returnrandom.ints(min,(max+1)).findFirst().getAsInt();
}
Метод getRandomNumberInts( ) генерирует случайные числа в заданном диапазоне: от min(включительно) и до max (число не входит в диапазон).
Метод ints( ) создает IntStream, соответственно вызывается функция findFirst( ), которая возвращает объект OptionalInt, описывающий первый элемент данного потока. После этого, чтобы вернуть значение int в OptionalInt, код вызывает метод getAsInt( ).
Ознакомьтесь с примером использования метода Random.ints(), который сгенерирует поток рандомных численных значений:
publicstaticvoidgetStreamOfRandomInts(intnum) {
Randomrandom = newRandom();
random.ints(num).sorted().forEach(System.out::println);
}
Код, используемый для вызова предыдущего метода:
System.out.println(«Randomintstream: RandomIntStreamofSize = «);
RandomDemo.getStreamOfRandomInts(5);
Результат работы вышеуказанного кода:
Randomintstream: RandomIntStreamofSize =
-1861317227
-1205557317
453883217
762357682
1725970934
Пример применения метода Random.ints():
publicstaticvoidgetStreamOfRandomIntsWithRange(intnum, intmin, intmax) {
Randomrandom = newRandom();
random.ints(num,min, max).sorted().forEach(System.out::println);
}
Код, вызывающий указанный выше метод:
System.out.println(«Randomintstreamofspecifiedsizeinrange:
RandomIntStreamofSizeInRange = «);
RandomDemo.getStreamOfRandomIntsWithRange(5,0,10);
Результат работы приведенного примера:
Randomintstreamofspecifiedsizeinrange: RandomIntStreamofSizeInRange =
2
2
3
4
6
Помимо ints( ) есть еще несколько методов, добавленных к классу Random. Они возвращают последовательный поток рандомных чисел. За это отвечают – DoubleStreamdoubles( ) и LongStreamlongs( ).
Генерация случайных чисел с помощью класса Random
С помощью класса java.util.Random можно сгенерировать случайные числа разных типов: int,double, long, float и boolean.
Прежде всего нужно создать экземпляр класса Random. После этого вызвать один из методов генератора рандомных значений: nextDouble( ),nextLong( ) или nextInt( ).
Метод nextInt( ) принимает граничное целое число и возвращает рандомное значение int от 0 (включительно) до заданного диапазона (не включая).
Приведем пример использования nextInt( ) класса Java 8:
publicstaticintgenerateRandomInt(intupperRange){
Randomrandom = newRandom();
returnrandom.nextInt(upperRange);
}
Пример метода nextInt( ), генерирующего целое число в указанном диапазоне:
publicstaticintgenerateRandomIntIntRange(intmin, intmax){
Random r = newRandom();
returnr.nextInt((max — min) + 1) + min;
}
Методы nextDouble( ) и nextFloat ( ) позволяют генерировать числовые значение с плавающей запятой и значения типа double, находящиеся в диапазоне от 0,0 до 1,0.
Код для методов nextDouble( ) и nextFloat ( ):
publicstaticdoublegenerateRandomDouble(){
Randomrandom = newRandom();
returnrandom.nextDouble();
}
publicstaticfloatgenerateRandomFloat(){
Randomrandom = newRandom();
returnrandom.nextFloat();
}
Генерация случайных чисел с помощью класса Math
Класс Math содержится в пакете java.util и успешно используется для генерирования случайных чисел. Он включает статичный метод Math.random(), который нужен для генерации случайных числовых значений типа double .
Math.random() возвращает положительное число равное или больше 0,0 и меньше 1.0. При использовании кода создается java.util.Random (объект генератора псевдослучайных чисел).
Метод можно применять с параметрами или без них. В параметрах указывается числовой диапазон, в пределах которого генерируются случайные значения.
Пример:
publicstaticdoublegetRandomNumber(){
double x = Math.random();
return x;
}
Метод getRandomNumber( ) использует Math.random() для возврата положительного числа, большего или равного 0,0 или меньше 1,0 .
Результат кода:
Doublebetween0.0and1.0: SimpleRandomNumber = 0.21753313144345698
Случайные числа в заданном диапазоне
Чтобы сгенерировать случайные числа в указанном диапазоне, нужно его указать. Синтаксис: Синтаксис:
(Math.random() * ((max — min) + 1)) + min
Для наглядности разобьем данное выражение на части:
- Прежде всего нужно умножить диапазон значений на результат, генерируемый методом random().Math.random() * (max — min) возвращает значение в диапазоне [0 , max- min] (при этом max не включен в диапазон).
- Теперь расширьте охват до необходимого диапазона с помощью минимального значения. Пример:
(Math.random() * ( max — min )) + min
Однако выражение не захватывает максимальное значение. Чтобы его получить, добавьте 1 к параметру диапазона. Таким образом, вы вернете случайное число в заданном диапазоне.
double x = (Math.random()*((max-min)+1))+min;
Полный пример генерации случайного числа на Java
importjava.util.Random;
publicclassTest {
publicstaticvoidmain(String[] args) {Randomrand = newRandom();
for (int i=0; i < 100; i++) {
int n = rand.nextInt(10);
System.out.println(n);
}
}
}
Написанная программа печатает 100 рандомных чисел от 0 до 9.
Случайные цвета
Работа с числами надоедает даже программистам, поэтому перейдем к цветам. В Андоид некоторые цвета получили специальные называния, хотя по своей сути – это числа типа int. К примеру, красный имеет константу Color.RED. Определить цвет по названию гораздо проще, чем по цифре.
publicvoidonClick(Viewview) {
Randomrandom = newRandom();
// Массив из пяти цветов
intcolors[] = { Color.BLUE, Color.GREEN, Color.MAGENTA, Color.RED,
Color.CYAN };
intpos = random.nextInt(colors.length);
// Меняем цвет у кнопки
mButton.setBackgroundColor(colors[pos]);
}
Нажимая на кнопку, ее цвет будет меняться рандомно.
Как видите существует много способов генерации случайных чисел или цветов в Java. Ну а было ли вам полезно напишите в комментариях. Не забудьте поделиться своим опытом.