Java util random - IT Справочник
Llscompany.ru

IT Справочник
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java util random

Класс Random

Класс java.util.Random представляет собой генератор псевдослучайных чисел.

Класс представлен двумя конструкторами

  • Random() — создаёт генератор чисел, использующий уникальное начальное число
  • Random(long seed) — позволяет указать начальное число вручную

Так как класс создаёт псевдослучайное число, то задав начальное число, вы определяете начальную точку случайной последовательности. И будете получать одинаковые случайные последовательности. Чтобы избежать такого совпадения, обычно используют второй конструктор с использованием текущего времени в качестве инициирующего значения.

  • boolean nextBoolean() — возвращает следующее случайное значение типа boolean
  • void nextBytes(byte[] buf) — заполняет массив случайно созданными значениями
  • double nextDouble() — возвращает следующее случайное значение типа double
  • float nextFloat() — возвращает следующее случайное значение типа float
  • synchronized double nextGaussian() — возвращает следующее случайное значение гауссова случайного числа, т.е. значения, центрированное по 0.0 со стандартным отклонением в 1.0 (кривая нормального распределения)
  • int nextInt(int n) — возвращает следующее случайное значение типа int в диапазоне от 0 до n
  • int nextInt() — возвращает следующее случайное значение типа int
  • long nextLong() — возвращает следующее случайное значение типа long
  • synchronized void setSeeD(long seed) — устанавливает начальное значение

Пример для вывода случайного числа.

Случайные числа часто используются в играх. Допустим, мы хотим вывести случайные числа от 1 до 6 при бросании игрального кубика. Попробуем.

При проверке вы заметите две нестыковки. Во-первых, иногда выпадает число 0, которого нет на кубике, а во-вторых никогда не выпадает число 6. Когда вы помещаете число в параметр метода, то это означает, что выпадают числа в диапазоне от 0 до указанного числа, которое в этот диапазон не входит. Если вы будете использовать число 7, то шестёрка станет выпадать, но по-прежнему будет выпадать число 0. Поэтому пример следует немного отредактировать.

Для генерации 10 чисел типа int используйте код:

Генерация в определённом интервале

Нужны случайные числа от 100 до 200? Пишем код.

Случайные цвета

Работать с числами не слишком интересно. Давайте поработаем со цветом. В Android некоторые цвета имеют конкретные названия, но по сути они являются числами типа int, например, красный цвет имеет константу Color.RED. Вам не надо знать, какое число соответствует этому цвету, так как проще понять по его названию.

Щёлкая по кнопке, вы будете менять её цвет случайным образом.

Лотерея «6 из 49»

Сформируем шесть случайных чисел из 49 и занесём их в списочный массив.

SecureRandom

Стандартный класс Random обычно используют для простых задач, не связанных с шифрованием. Для криптографии следует использовать схожий класс java.security.SecureRandom.

Не забывайте, что в классе Math есть метод random(), возвращающий случайное число от 0 до 1 (единица в диапазон не входит).

Java.util.Random.nextInt () в Java

Генерация случайных чисел сама по себе имеет полезную полезность, и достижение ее с помощью функции может оказаться очень полезным. Java на своем языке посвятила целую библиотеку случайным числам, видя ее важность в программировании дня. nextInt () обсуждается в этой статье.

  1. java.util.Random.nextInt ():nextInt () используется для получения следующего случайного целочисленного значения из последовательности этого генератора случайных чисел.

В следующем примере показано использование java.util.Random.nextInt ()

// Java-код для демонстрации работы
// of nextInt ()

public class NextInt1 <

public static void main(String[] args)

// создаем случайный объект

Random ran = new Random();

// генерируем целое число

int nxt = ran.nextInt();

// Печать случайного числа

( «The Randomly generated integer is : » + nxt);

Выход:

java.util.Random.nextInt (int n) : nextInt (int n) используется для получения случайного числа между 0 (включительно) и числом, переданным в этом аргументе (n), не считая.

В следующем примере показано использование java.util.Random.nextInt (int n)

// Java-код для демонстрации работы
// of nextInt (n)

public class NextInt2 <

public static void main(String args[])

// создаем случайный объект

Random ran = new Random();

// Распечатать следующее значение int

// Возвращает число от 0 до 9

int nxt = ran.nextInt( 10 );

// Печать случайного числа

( «Random number between 0 and 10 is : » + nxt);

Выход:

исключение

IllegalArgumentException: это происходит, когда переданный аргумент не является положительным.
Пример, иллюстрирующий исключение, генерируемое, когда n не является положительным числом:

// Java-код для демонстрации исключения
// of nextInt (n)

public class NextInt2 <

public static void main(String[] args)

// создаем случайный объект

Random ran = new Random();

// генерируем число от 0 до -12345

// Вызывает ошибку времени выполнения, так как n отрицательно.

int nxt = ran.nextInt(- 12345 );

( «Generated Random number is : » + nxt);

Ошибки во время выполнения:

Практическое применение

Генерация случайных чисел имеет множество применений, будь то лотерея, азартные игры или мелкомасштабные игры . Ниже была продемонстрирована небольшая игра в кости, в которой 2 игрока бросают кости с 6-ю отметками, и выигрывает человек, набравший 30 очков 1-го числа.

// Java-код для демонстрации приложения
// of nextInt (n)

public class NextIntAppli <

public static void main(String[] args)

int sum = 0 , sum1 = 0 , count = 0 , count1 = 0 ;

// создаем случайный объект

Random ran = new Random();

int p1 = ran.nextInt( 6 );

( «Player 1 after turn %d is : %dn» , turn, sum);

int p2 = ran.nextInt( 6 );

( «Player 2 after turn %d is : %dn» , turn, sum1);

Генерация случайных чисел в Java

При разработке приложений часто нужно генерировать случайные числа. Java предоставляет для этого классы java.lang.Math и java.util.Random . В этой статье я расскажу о нескольких способах генерации случайных чисел и приведу конкретные примеры реализации.

Генерация случайных чисел с помощью класса Math

Для генерации случайных чисел Java предоставляет класс Math, доступный в пакете java.util. Этот класс содержит статичный метод Math.random(), предназначенный для генерации случайных чисел типа double .

Метод random( ) возвращает положительное число большее или равное 0,0 и меньшее 1,0. При вызове данного метода создается объект генератора псевдослучайных чисел java.util.Random.

Math.random() можно использовать с параметрами и без. В параметрах задается диапазон чисел, в пределах которого будут генерироваться случайные значения.

Пример использования Math.random():

Метод getRandomNumber( ) использует Math.random() для возврата положительного числа, которое больше или равно 0,0 или меньше 1,0 .

Результат выполнения кода:

Случайные числа в заданном диапазоне

Для генерации случайных чисел в заданном диапазоне необходимо указать диапазон. Синтаксис:

Разобьем это выражение на части:

  1. Сначала умножаем диапазон значений на результат, который генерирует метод random().Math.random() * (max — min)возвращает значение в диапазоне [0 , max- min], где max не входит в заданные рамки. Например, выражение Math.random()*5 вернет значение в диапазоне [0 , 5], в который 5 не входит.
  2. Расширяем охват до нужного диапазона. Это делается с помощью минимального значения.
Читать еще:  Как открыть файл через java

Но выражение по-прежнему не охватывает максимальное значение.

  • Чтобы получить максимальное значение, прибавьте 1 к параметру диапазона (max — min). Это вернет случайное число в указанном диапазоне.

Существуют различные способы реализации приведенного выше выражения. Рассмотрим некоторые из них.

Случайное двойное число в заданном диапазоне

По умолчанию метод Math.random() при каждом вызове возвращает случайное число типа double . Например:

Вы можете вызвать предыдущий метод из метода main, передав аргументы, подобные этому.

Случайное целое число в заданном диапазоне

Пример генерации случайного целочисленного значения в указанном диапазоне:

Метод getRandomIntegerBetweenRange() создает случайное целое число в указанном диапазоне. Так как Math.random() генерирует случайные числа с плавающей запятой, то нужно привести полученное значение к типу int. Этот метод можно вызвать из метода main, передав ему аргументы следующим образом:

Примечание . В аргументах также можно передать диапазон отрицательных значений, чтобы сгенерировать случайное отрицательное число в этом диапазоне.

Генерация случайных чисел с помощью класса Random

Класс java.util.Random можно применять для генерации случайных чисел различных типов: int, float, double, long и boolean .

Для этого сначала создайте экземпляр класса Random, а затем вызовите один из методов генератора случайных значений: nextInt( ), nextDouble( ) или nextLong( ).

Метод nextInt( ) класса Random принимает граничное целое число и возвращает случайное значение int от 0 (включительно) до указанного предела (не включая).

Пример использования метода nextInt( ):

Пример использования метода nextInt ( ) для генерации целого числа в заданном диапазоне:

Методы nextFloat ( ) и nextDouble( ) позволяют генерировать числа с плавающей запятой, а также значения типа double в диапазоне от 0,0 до 1,0.

Код для использования обоих методов:

Особенности генерации случайных чисел в Java 8

В Java 8 был представлен новый метод класса java.util.Random — ints(). Он возвращает неограниченный поток псевдослучайных значений int. Данный метод позволяет указать диапазон чисел, задав минимальное и максимальное значения.

Пример использования метода Random.ints() для генерации случайных целочисленных значений в указанном диапазоне:

Метод getRandomNumberInts( ) генерирует поток случайных целых чисел от min(включительно) и до max (не входит в диапазон).

Метод ints( ) создает IntStream, поэтому будет вызвана функция findFirst( ). Она возвращает объект OptionalInt , который описывает первый элемент этого потока. Затем код вызывает метод getAsInt( ), чтобы вернуть значение int в OptionalInt.

Пример использования метода Random.ints() для генерации потока случайных целочисленных значений:

Код для вызова предыдущего метода:

Результат работы приведенного выше кода:

Пример использования метода Random.ints() для генерации потока из диапазона случайных целочисленных значений:

Код для вызова приведенного выше метода:

Результат работы предыдущего примера:

Кроме ints( ) существует еще несколько методов, которые были добавлены к классу Random в Java 8. Они могут возвращать последовательный поток случайных чисел. Это:

  • LongStream longs( );
  • DoubleStream doubles( ).

Заключение

Класс java.util.Random реализует линейный конгруэнтный генератор (LCG). Он отличается быстротой работы. Но при этом он не подходит для использования в режиме реального времени. Например, для генерации уникального идентификатора сессии на сервере, в научных экспериментах, криптографии лотереях и розыгрышах.

Данная публикация представляет собой перевод статьи « Random Number Generation in Java » , подготовленной дружной командой проекта Интернет-технологии.ру

Java util random

An instance of this class is used to generate a stream of pseudorandom numbers. The class uses a 48-bit seed, which is modified using a linear congruential formula. (See Donald Knuth, The Art of Computer Programming, Volume 2, Section 3.2.1.)

If two instances of Random are created with the same seed, and the same sequence of method calls is made for each, they will generate and return identical sequences of numbers. In order to guarantee this property, particular algorithms are specified for the class Random. Java implementations must use all the algorithms shown here for the class Random, for the sake of absolute portability of Java code. However, subclasses of class Random are permitted to use other algorithms, so long as they adhere to the general contracts for all the methods.

The algorithms implemented by class Random use a protected utility method that on each invocation can supply up to 32 pseudorandomly generated bits.

Many applications will find the random method in class Math simpler to use.

Random


Random

Parameters: seed — the initial seed. See Also: setSeed(long)

setSeed

Parameters: seed — the initial seed.

The general contract of next is that it returns an int value and if the argument bits is between 1 and 32 (inclusive), then that many low-order bits of the returned value will be (approximately) independently chosen bit values, each of which is (approximately) equally likely to be or 1. The method next is implemented by class Random as follows: This is a linear congruential pseudorandom number generator, as defined by D. H. Lehmer and described by Donald E. Knuth in The Art of Computer Programming, Volume 2: Seminumerical Algorithms, section 3.2.1.

Parameters: bits — random bits Returns: the next pseudorandom value from this random number generator’s sequence. Since: JDK1.1

nextBytes

Parameters: bytes — the non-null byte array in which to put the random bytes. Since: JDK1.1

nextInt

Returns: the next pseudorandom, uniformly distributed int value from this random number generator’s sequence.

nextInt

The hedge «approximately» is used in the foregoing description only because the next method is only approximately an unbiased source of independently chosen bits. If it were a perfect source of randomly chosen bits, then the algorithm shown would choose int values from the stated range with perfect uniformity.

The algorithm is slightly tricky. It rejects values that would result in an uneven distribution (due to the fact that 2^31 is not divisible by n). The probability of a value being rejected depends on n. The worst case is n=2^30+1, for which the probability of a reject is 1/2, and the expected number of iterations before the loop terminates is 2.

The algorithm treats the case where n is a power of two specially: it returns the correct number of high-order bits from the underlying pseudo-random number generator. In the absence of special treatment, the correct number of low-order bits would be returned. Linear congruential pseudo-random number generators such as the one implemented by this class are known to have short periods in the sequence of values of their low-order bits. Thus, this special case greatly increases the length of the sequence of values returned by successive calls to this method if n is a small power of two.

Читать еще:  Java arraylist indexof

Parameters: n — the bound on the random number to be returned. Must be positive. Returns: a pseudorandom, uniformly distributed int value between 0 (inclusive) and n (exclusive). Throws: IllegalArgumentException — n is not positive. Since: 1.2

nextLong

Returns: the next pseudorandom, uniformly distributed long value from this random number generator’s sequence.

nextBoolean

Returns: the next pseudorandom, uniformly distributed boolean value from this random number generator’s sequence. Since: 1.2

nextFloat

The general contract of nextFloat is that one float value, chosen (approximately) uniformly from the range 0.0f (inclusive) to 1.0f (exclusive), is pseudorandomly generated and returned. All 2 24 possible float values of the form m x&nbsp2 -24 , where m is a positive integer less than 2 24 , are produced with (approximately) equal probability. The method nextFloat is implemented by class Random as follows: The hedge «approximately» is used in the foregoing description only because the next method is only approximately an unbiased source of independently chosen bits. If it were a perfect source or randomly chosen bits, then the algorithm shown would choose float values from the stated range with perfect uniformity.

[In early versions of Java, the result was incorrectly calculated as: This might seem to be equivalent, if not better, but in fact it introduced a slight nonuniformity because of the bias in the rounding of floating-point numbers: it was slightly more likely that the low-order bit of the significand would be 0 than that it would be 1.]

Returns: the next pseudorandom, uniformly distributed float value between 0.0 and 1.0 from this random number generator’s sequence.

nextDouble

The general contract of nextDouble is that one double value, chosen (approximately) uniformly from the range 0.0d (inclusive) to 1.0d (exclusive), is pseudorandomly generated and returned. All 2 53 possible float values of the form m x 2 -53 , where m is a positive integer less than 2 53 , are produced with (approximately) equal probability. The method nextDouble is implemented by class Random as follows:

The hedge «approximately» is used in the foregoing description only because the next method is only approximately an unbiased source of independently chosen bits. If it were a perfect source or randomly chosen bits, then the algorithm shown would choose double values from the stated range with perfect uniformity.

[In early versions of Java, the result was incorrectly calculated as: This might seem to be equivalent, if not better, but in fact it introduced a large nonuniformity because of the bias in the rounding of floating-point numbers: it was three times as likely that the low-order bit of the significand would be 0 than that it would be 1! This nonuniformity probably doesn’t matter much in practice, but we strive for perfection.]

Returns: the next pseudorandom, uniformly distributed double value between 0.0 and 1.0 from this random number generator’s sequence.

nextGaussian

The general contract of nextGaussian is that one double value, chosen from (approximately) the usual normal distribution with mean 0.0 and standard deviation 1.0, is pseudorandomly generated and returned. The method nextGaussian is implemented by class Random as follows: This uses the polar method of G. E. P. Box, M. E. Muller, and G. Marsaglia, as described by Donald E. Knuth in The Art of Computer Programming, Volume 2: Seminumerical Algorithms, section 3.4.1, subsection C, algorithm P. Note that it generates two independent values at the cost of only one call to Math.log and one call to Math.sqrt.

Returns: the next pseudorandom, Gaussian («normally») distributed double value with mean 0.0 and standard deviation 1.0 from this random number generator’s sequence.

Java util random

If two instances of Random are created with the same seed, and the same sequence of method calls is made for each, they will generate and return identical sequences of numbers. In order to guarantee this property, particular algorithms are specified for the class Random . Java implementations must use all the algorithms shown here for the class Random , for the sake of absolute portability of Java code. However, subclasses of class Random are permitted to use other algorithms, so long as they adhere to the general contracts for all the methods.

The algorithms implemented by class Random use a protected utility method that on each invocation can supply up to 32 pseudorandomly generated bits.

Many applications will find the method Math.random() simpler to use.

Instances of java.util.Random are threadsafe. However, the concurrent use of the same java.util.Random instance across threads may encounter contention and consequent poor performance. Consider instead using ThreadLocalRandom in multithreaded designs.

Instances of java.util.Random are not cryptographically secure. Consider instead using SecureRandom to get a cryptographically secure pseudo-random number generator for use by security-sensitive applications.

Constructor Summary

Method Summary

Methods inherited from class java.lang.Object

Constructor Detail

Random

Random

The invocation new Random(seed) is equivalent to:

Method Detail

setSeed

The implementation of setSeed by class Random happens to use only 48 bits of the given seed. In general, however, an overriding method may use all 64 bits of the long argument as a seed value.

The general contract of next is that it returns an int value and if the argument bits is between 1 and 32 (inclusive), then that many low-order bits of the returned value will be (approximately) independently chosen bit values, each of which is (approximately) equally likely to be 0 or 1 . The method next is implemented by class Random by atomically updating the seed to and returning This is a linear congruential pseudorandom number generator, as defined by D. H. Lehmer and described by Donald E. Knuth in The Art of Computer Programming, Volume 3: Seminumerical Algorithms, section 3.2.1.

nextBytes

The method nextBytes is implemented by class Random as if by:

nextInt

The method nextInt is implemented by class Random as if by:

nextInt

The hedge «approximately» is used in the foregoing description only because the next method is only approximately an unbiased source of independently chosen bits. If it were a perfect source of randomly chosen bits, then the algorithm shown would choose int values from the stated range with perfect uniformity.

Читать еще:  Javascript sql запрос

The algorithm is slightly tricky. It rejects values that would result in an uneven distribution (due to the fact that 2^31 is not divisible by n). The probability of a value being rejected depends on n. The worst case is n=2^30+1, for which the probability of a reject is 1/2, and the expected number of iterations before the loop terminates is 2.

The algorithm treats the case where n is a power of two specially: it returns the correct number of high-order bits from the underlying pseudo-random number generator. In the absence of special treatment, the correct number of low-order bits would be returned. Linear congruential pseudo-random number generators such as the one implemented by this class are known to have short periods in the sequence of values of their low-order bits. Thus, this special case greatly increases the length of the sequence of values returned by successive calls to this method if n is a small power of two.

nextLong

The method nextLong is implemented by class Random as if by: Because class Random uses a seed with only 48 bits, this algorithm will not return all possible long values.

nextBoolean

The method nextBoolean is implemented by class Random as if by:

nextFloat

The general contract of nextFloat is that one float value, chosen (approximately) uniformly from the range 0.0f (inclusive) to 1.0f (exclusive), is pseudorandomly generated and returned. All 2 24 possible float values of the form m x 2 -24 , where m is a positive integer less than 2 24 , are produced with (approximately) equal probability.

The method nextFloat is implemented by class Random as if by:

The hedge «approximately» is used in the foregoing description only because the next method is only approximately an unbiased source of independently chosen bits. If it were a perfect source of randomly chosen bits, then the algorithm shown would choose float values from the stated range with perfect uniformity.

[In early versions of Java, the result was incorrectly calculated as: This might seem to be equivalent, if not better, but in fact it introduced a slight nonuniformity because of the bias in the rounding of floating-point numbers: it was slightly more likely that the low-order bit of the significand would be 0 than that it would be 1.]

nextDouble

The general contract of nextDouble is that one double value, chosen (approximately) uniformly from the range 0.0d (inclusive) to 1.0d (exclusive), is pseudorandomly generated and returned.

The method nextDouble is implemented by class Random as if by:

The hedge «approximately» is used in the foregoing description only because the next method is only approximately an unbiased source of independently chosen bits. If it were a perfect source of randomly chosen bits, then the algorithm shown would choose double values from the stated range with perfect uniformity.

[In early versions of Java, the result was incorrectly calculated as: This might seem to be equivalent, if not better, but in fact it introduced a large nonuniformity because of the bias in the rounding of floating-point numbers: it was three times as likely that the low-order bit of the significand would be 0 than that it would be 1! This nonuniformity probably doesn’t matter much in practice, but we strive for perfection.]

nextGaussian

The general contract of nextGaussian is that one double value, chosen from (approximately) the usual normal distribution with mean 0.0 and standard deviation 1.0 , is pseudorandomly generated and returned.

The method nextGaussian is implemented by class Random as if by a threadsafe version of the following: This uses the polar method of G. E. P. Box, M. E. Muller, and G. Marsaglia, as described by Donald E. Knuth in The Art of Computer Programming, Volume 3: Seminumerical Algorithms, section 3.4.1, subsection C, algorithm P. Note that it generates two independent values at the cost of only one call to StrictMath.log and one call to StrictMath.sqrt .

A pseudorandom int value is generated as if it’s the result of calling the method nextInt() .

A pseudorandom int value is generated as if it’s the result of calling the method nextInt() .

A pseudorandom int value is generated as if it’s the result of calling the following method with the origin and bound:

A pseudorandom int value is generated as if it’s the result of calling the following method with the origin and bound:

longs

A pseudorandom long value is generated as if it’s the result of calling the method nextLong() .

longs

A pseudorandom long value is generated as if it’s the result of calling the method nextLong() .

longs

A pseudorandom long value is generated as if it’s the result of calling the following method with the origin and bound:

longs

A pseudorandom long value is generated as if it’s the result of calling the following method with the origin and bound:

doubles

A pseudorandom double value is generated as if it’s the result of calling the method nextDouble() .

doubles

A pseudorandom double value is generated as if it’s the result of calling the method nextDouble() .

doubles

A pseudorandom double value is generated as if it’s the result of calling the following method with the origin and bound:

doubles

A pseudorandom double value is generated as if it’s the result of calling the following method with the origin and bound:

  • Overview
  • Package
  • Class
  • Use
  • Tree
  • Deprecated
  • Index
  • Help
  • Summary:
  • Nested |
  • Field |
  • Constr |
  • Method
  • Detail:
  • Field |
  • Constr |
  • Method

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector