Random java как работает
Перейти к содержимому

Random java как работает

  • автор:

Random java как работает

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

All Methods Instance Methods Concrete Methods

Modifier and Type Method and Description
DoubleStream doubles ()

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.

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:

  • Summary:
  • Nested |
  • Field | |
  • Detail:
  • Field | |

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, 2023, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.

Class 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.

Nested Class Summary

Nested classes/interfaces declared in interface java.util.random.RandomGenerator

Constructor Summary

Method Summary

Methods declared in class java.lang.Object

Methods declared in interface java.util.random.RandomGenerator

Constructor Details

Random

Random

Method Details

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 2, Third edition: Seminumerical Algorithms , section 3.2.1.

nextBytes

nextInt

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.

nextLong

nextBoolean

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 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 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.

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:

Report a bug or suggest an enhancement
For further API reference and developer documentation see the Java SE Documentation, which contains more detailed, developer-targeted descriptions with conceptual overviews, definitions of terms, workarounds, and working code examples. Other versions.
Java is a trademark or registered trademark of Oracle and/or its affiliates in the US and other countries.
Copyright © 1993, 2022, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. Use is subject to license terms and the documentation redistribution policy.

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

В этом посте будет обсуждаться, как генерировать случайные числа от 0 до n включительно в Java с использованием Random учебный класс, Math учебный класс, ThreadLocalRandom учебный класс, SecureRandom класс и математическая библиотека Apache Commons.

1. Использование Random.nextInt() метод

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *