Java. Класс Random. Генерирование случайных чисел
Класс Random . Генерирование случайных чисел. Конструкторы класса. Список методов. Методы получения одиночных случайных чисел
Поиск на других ресурсах:
1. Класс Random . Общие сведения. Конструкторы класса
Класс Random используется для создания случайных чисел. Для использования возможностей (методов) класса Random в начале приложения нужно подключить модуль java.util.Random следующим образом
import java.util.Random;
Конструкторы класса создают новый генератор случайных чисел. Для создания генератора используются следующие основные конструкторы
Random() Random(int seed)
- seed – начальное число, в отношении которого генерируется последовательность случайных чисел. Это число поддерживается методом next() , генерирующим псевдослучайное число (pseudorandom number).
Создание экземпляров класса Random , которые будут генерировать последовательности случайных чисел с помощью вышеперечисленных конструкторов может быть примерно таким
Random rnd1 = new Random(122); Random rnd2 = new Random();
- r1 , r2 – экземпляры, которые будут генерировать последовательности случайных чисел;
- 122 – целое число, с которого начинается формирование следующих случайных чисел. Здесь можно задавать любое другое целое число (55, 101… и т.п.).
После создания экземпляра класса Random становятся доступны непосредственно методы, позволяющие получать последовательности случайных чисел.
2. Базовые методы класса Random . Список
Класс Random содержит ряд методов для генерирования случайных чисел:
- setSeed() – устанавливает исходное значение, которое используется в качестве основы для генерирования случайных чисел;
- doubles() – формирует данные типа double в виде потока случайных чисел;
- ints() – формирует данные типа int в виде потока случайных чисел;
- longs() – формирует поток данных типа long, содержащий случайные числа;
- nextBoolean() – возвращает случайное значение типа boolean ;
- nextBytes() – возвращает массив случайных чисел типа byte[] ;
- nextDouble() – возвращает случайное число типа double ;
- nextFloat() – возвращает случайное число типа float ;
- nextGaussian() – возвращает псевдослучайное значение на основе распределения Гаусса;
- nextInt() – возвращает случайное число типа int ;
- nextLong() – возвращает случайное число типа long .
3. Метод setSeed(int) . Установить начальное значение
Метод setSeed() позволяет задавать исходное значение, на основе которого формируется последовательность случайных чисел. В последовательности каждое последующее число зависит от предыдущего. Согласно документации сигнатура метода setSeed() следующая
void setSeed(long seed);
Создание экземпляра класса Random с помощью конструктора с параметром
Random rnd = new Random(seed);
Random rnd = new Random(); rnd.setSeed(seed);
В примере создается поток данных, содержащих 10 случайных чисел типа double . Сначала начальное значение (seed) задается равным 122, затем оно переопределяется новым значением 150 с помощью метода setSeed() .
import java.util.Iterator; // нужно для использования класса Iterator<> import java.util.Random; // нужно для использования класса Random import java.util.stream.DoubleStream; // нужно для использования класса DoubleStream public class MathFunctions < public static void main(String[] args) < // 1. Создать поток на основе ядра 122 Random r1 = new Random(122); // // 2. Установить новое ядро - вызов метода setSeed() r1.setSeed(150); // 3. Получить поток из 10 чисел типа double DoubleStream ds1 = r1.doubles(10); // 4. Получить итератор на поток ds1 Iterator it1 = ds1.iterator(); // 5. Вывести в цикле 10 случайных чисел из потока ds1 System.out.println("Stream ds1:"); while (it1.hasNext()) < System.out.println(it1.next()); > > >
Stream ds1: 0.7436883394251182 0.16523214952520537 0.6551835693241186 0.46667154390807386 0.02763677886761373 0.7815907963879736 0.23597049719139052 0.3714539686578885 0.22142228403292508 0.5329685061913043
4. Метод nextBoolean() . Получить случайное значение типа boolean
Метод nextBoolean() позволяет получить случайное значение типа boolean . Согласно документации объявления метода в классе Random следующее
public boolean nextBoolean();
import java.util.Random; public class MathFunctions < public static void main(String[] args) < // 1. Создать поток на основе произвольного исходного значения Random r1 = new Random(); // 2. Получить случайное значение типа boolean boolean b1 = r1.nextBoolean(); System.out.println("b1 color: #333300;">⇑5. Метод nextDouble(). Получить случайное число типа double. Формирование чисел в заданных пределах
Метод nextDouble() возвращает случайное число типа double. Значение числа лежит в пределах [0.0; 1.0[ – значение 0.0 включительно, значение 1.0 исключительно. Согласно документации объявление метода следующее
public double nextDouble();
В примере сначала формируется массив из 10 чисел типа double . Затем этот массив выводится на экран. Значение каждого числа типа double лежит в пределах [min; max) где min и max вводятся с клавиатуры.
import java.util.Random; // нужно для использования класса Random import java.util.Scanner; // нужно для использования класса Scanner public class MathFunctions < public static void main(String[] args) < // 1. Создать поток на основе произвольного исходного значения Random rnd = new Random(); // 2. Создать массив из 10 элементов типа double double[] AD = new double[10]; // 3. Задать с клавиатуры нижнюю и верхнюю границу случайных чисел double min, max; Scanner input = new Scanner(System.in); // 3.1. Ввести нижнюю границу System.out.print("min color: #008000;"> // 3.2. Ввести верхнюю границу System.out.print("max color: #008000;"> // 4. Заполнить массив AD случайными числами в пределах [min; max] double value; for (int i=0; i // Получить случайное число в пределах [0.0; 1.0) value = rnd.nextDouble(); // Откорректировать пределы числа value как [min; max] AD[i] = min + value * (max - min); > // 5. Вывести массив AD System.out.println("\nAD:"); for (int i=0; iout.println(AD[i]); > >min = 2.5 max = 3.8 AD: 2.8359371330191094 2.758080086113864 3.573990757948374 3.3258831628588483 3.4857770403575628 3.659913452046651 3.218060124836948 3.032705795552893 3.7447915830146092 2.7911559393660586. Метод nextFloat() . Получить случайное число типа float
Метод nextFloat() возвращает случайное число типа float . Сигнатура метода следующая
float nextFloat();
Метод возвращает число, которое находится в диапазоне [0.0f; 1.0f).
В примере формируется массив из 10 случайных чисел типа float . Числа лежат в диапазоне [-5; 5).
import java.util.Random; // нужно для использования класса Random import java.util.Scanner; // нужно для использования класса Scanner public class MathFunctions < public static void main(String[] args) < // 1. Создать поток на основе произвольного исходного значения Random rnd = new Random(); // 2. Создать массив из 10 элементов типа float float[] AF = new float[10]; // 3. Задать с клавиатуры нижний и верхний предел случайных чисел float min, max; Scanner input = new Scanner(System.in); // 3.1. Ввести нижнюю границу System.out.print("min color: #008000;"> // 3.2. Ввести верхнюю границу System.out.print("max color: #008000;"> // 4. Заполнить массив AF случайными числами в пределах [min; max] float value; for (int i=0; i // Получить случайное число в пределах [0.0; 1.0) value = rnd.nextFloat(); // Откорректировать пределы числа value как [min; max] AF[i] = min + value * (max - min); > // 5. Вывести массив AF System.out.println("\nAF:"); for (int i=0; iout.println(AF[i]); > >min = -5 max = 5 AF: -0.4368925 -4.857518 -1.9285429 -1.3483305 -1.2607784 3.6692915 3.8821516 4.8362236 3.9554806 0.305145267. Метод nextGaussian() . Получить псевдослучайное значение на основе распределения Гаусса
Метод nextGaussian() возвращает значение типа double , полученное на основе распределения Гаусса со средним значением 0.0 и стандартным отклонением 1.0. Согласно документации объявления метода в классе Random следующее
public double nextGaussian();
import java.util.Random; public class MathFunctions < public static void main(String[] args) < // 1. Создать поток на основе произвольного исходного значения Random rnd = new Random(); // 2. Создать массив AD из 10 элементов типа double // в котором элементы получаются на основе распределения Гаусса double[] AD = new double[10]; // 3. Заполнить массив AD случайными числами // с использованием метода nextGaussian() for (int i=0; i // 4. Вывести массив AD на экран System.out.println("Array AD:"); for (int i=0; iout.println(AD[i]+" "); > >Array AD: 0.8462285437123548 1.1084379848996055 0.5552376880883958 -1.0787586788543444 0.9944069427425211 0.8645907102307332 -1.449023177851094 1.2567221522577043 -1.073685704004384 -0.87097056039267118. Метод nextInt() . Получить случайное число типа int . Получить целое число в заданных пределах
Метод nextInt() возвращает целое случайное число типа int . Число может быть как положительным, так и отрицательным. Согласно документации объявление метода следующее
public int nextInt();
В примере с помощью метода nextInt() формируется массив случайных чисел. Каждое число имеет значение в пределах [min; max] . Для формирования числа выведена формула. В конце массив сформированных чисел выводится на экран. Для ввода цифр с клавиатуры используются средства класса Scanner .
import java.util.Random; // нужно для использования класса Random import java.util.Scanner; // нужно для использования класса Scanner public class MathFunctions < public static void main(String[] args) < // 1. Создать поток на основе произвольного исходного значения Random rnd = new Random(); // 2. Создать массив из 10 элементов типа int int[] AI = new int[10]; // 3. Задать с клавиатуры нижний и верхний предел случайных чисел int min, max; Scanner input = new Scanner(System.in); // 3.1. Ввести нижнюю границу System.out.print("min color: #008000;"> // 3.2. Ввести верхнюю границу System.out.print("max color: #008000;"> // 4. Заполнить массив AI случайными числами в пределах [min; max] for (int i=0; iabs(rnd.nextInt()) % (max - min + 1); // 5. Вывести массив System.out.println("\nAI:"); for (int i=0; iout.println(AI[i]); > >min = 1 max = 10 AI: 7 10 5 5 8 2 1 4 9 59. Метод nextLong() . Получить случайное число типа long
Метод nextLong() возвращает случайное число типа long . Согласно документации Java объявление метода выглядит следующим образом
public long nextLong();
import java.util.Random; public class MathFunctions < public static void main(String[] args) < // 1. Создать поток на основе произвольного исходного значения Random rnd = new Random(); // 2. Создать массив AL из 10 элементов типа long long[] AL = new long[10]; // 3. Заполнить массив AL случайными числами // с использованием метода nextLong() for (int i=0; i // 4. Вывести массив AL на экран System.out.println("Array AL:"); for (int i=0; iout.println(AL[i]+" "); > >Array AL: 7366919727266127728 -979699283376638676 5249017576319962809 -4343155317134154076 6027817083452027820 -2862223376222694775 1510496055653313188 5133621007379261861 5000401929540016138 5865861847345821978Связанные темы
Как заполнить массив случайными числами java
Заполнить массив случайными числами можно с помощью класса Random :
import java.util.Arrays; import java.util.Random; public class App public static void main(String[] args) int min = 0; int max = 100; Random random = new Random(); int[] arr = new int[10]; arr = Arrays.stream(arr) .map(item -> random.nextInt(min, max)) .toArray(); // для двумерного массива int[][] arr2 = new int[5][10]; arr2 = Arrays.stream(arr2) .map(row -> Arrays.stream(row) .map(item -> random.nextInt(min, max)) .toArray()) .toArray(int[][]::new); > >