Как сгенерировать случайное число в 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

Для наглядности разобьем данное выражение на части:

  1. Прежде всего нужно умножить диапазон значений на результат, генерируемый методом random().Math.random() * (max — min) возвращает значение в диапазоне [0 , max- min] (при этом max не включен в диапазон).
  2. Теперь расширьте охват до необходимого диапазона с помощью минимального значения. Пример:
    (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. Ну а было ли вам полезно напишите в комментариях. Не забудьте поделиться своим опытом.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *