Класс Random. Генерирование случайных чисел. Конструкторы класса. Список методов. Методы получения одиночных случайных чисел
Содержание
- 1. Класс Random. Общие сведения. Конструкторы класса
- 2. Базовые методы класса Random. Список
- 3. Метод setSeed(int). Установить начальное значение
- 4. Метод nextBoolean(). Получить случайное значение типа boolean
- 5. Метод nextDouble(). Получить случайное число типа double. Формирование чисел в заданных пределах
- 6. Метод nextFloat(). Получить случайное число типа float
- 7. Метод nextGaussian(). Получить псевдослучайное значение на основе распределения Гаусса
- 8. Метод nextInt(). Получить случайное число типа int. Получить целое число в заданных пределах
- 9. Метод nextLong(). Получить случайное число типа long
- Связанные темы
Поиск на других ресурсах:
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);
здесь
- seed – начальное значение, на основе которого генерируется последовательность случайных чисел.
Создание экземпляра класса Random с помощью конструктора с параметром
Random rnd = new Random(seed);
эквивалентна строкам
Random rnd = new Random();
rnd.setSeed(seed);
здесь
- seed – некоторое целочисленное значение типа long.
Пример.
В примере создается поток данных, содержащих 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<Double> 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 = " + b1); } }
Результат
b1 = true
⇑
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 = "); min = input.nextDouble(); // 3.2. Ввести верхнюю границу System.out.print("max = "); max = input.nextDouble(); // 4. Заполнить массив AD случайными числами в пределах [min; max] double value; for (int i=0; i<AD.length; 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; i<10; i++) System.out.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.791155939366058
⇑
6. Метод 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 = "); min = input.nextFloat(); // 3.2. Ввести верхнюю границу System.out.print("max = "); max = input.nextFloat(); // 4. Заполнить массив AF случайными числами в пределах [min; max] float value; for (int i=0; i<AF.length; 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; i<10; i++) System.out.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.30514526
⇑
7. Метод 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<AD.length; i++) AD[i] = rnd.nextGaussian(); // 4. Вывести массив AD на экран System.out.println("Array AD:"); for (int i=0; i<AD.length; i++) System.out.println(AD[i]+" "); } }
Результат
Array AD: 0.8462285437123548 1.1084379848996055 0.5552376880883958 -1.0787586788543444 0.9944069427425211 0.8645907102307332 -1.449023177851094 1.2567221522577043 -1.073685704004384 -0.8709705603926711
⇑
8. Метод 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 = "); min = input.nextInt(); // 3.2. Ввести верхнюю границу System.out.print("max = "); max = input.nextInt(); // 4. Заполнить массив AI случайными числами в пределах [min; max] for (int i=0; i<AI.length; i++) AI[i] = min + Math.abs(rnd.nextInt()) % (max - min + 1); // 5. Вывести массив System.out.println("\nAI:"); for (int i=0; i<10; i++) System.out.println(AI[i]); } }
Результат
min = 1 max = 10 AI: 7 10 5 5 8 2 1 4 9 5
⇑
9. Метод 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<AL.length; i++) AL[i] = rnd.nextLong(); // 4. Вывести массив AL на экран System.out.println("Array AL:"); for (int i=0; i<AL.length; i++) System.out.println(AL[i]+" "); } }
Результат
Array AL: 7366919727266127728 -979699283376638676 5249017576319962809 -4343155317134154076 6027817083452027820 -2862223376222694775 1510496055653313188 5133621007379261861 5000401929540016138 5865861847345821978
⇑
Связанные темы
⇑