Читать далее C++. Шаблоны классов. Полная специализация. Частичная специализация
Архив метки: класс
C#. ADO .NET. Класс DbCommand. Примеры использования
C#. ADO .NET. Присоединенный режим (connected mode). Класс DbConnection
Java. Класс Math. Функции округления
Java. Класс Random. Генерирование случайных чисел
Класс 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
⇑
Связанные темы
⇑