Клас 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
⇑
Споріднені теми
⇑