随机数生成器 java

Today we will look at how to generate a random number in Java. Sometimes we need to generate random numbers in Java programs. For example, a dice game or to generate a random key id for encryption, etc.

今天,我们将研究如何在Java中生成随机数。 有时我们需要在Java程序中生成随机数。 例如,骰子游戏或生成用于加密的随机密钥ID等。

Java中的随机数生成器 (Random Number Generator in Java)

There are many ways to generate a random number in java.

有很多方法可以在Java中生成随机数。

  1. java.util.Random class can be used to create random numbers. It provides several methods to generate random integer, long, double etc.

    java.util.Random类可用于创建随机数。 它提供了几种生成随机整数,long,double等的方法。
  2. We can also use Math.random() to generate a double. This method internally uses Java Random class.

    我们还可以使用Math.random()生成一个double。 此方法在内部使用Java Random类。
  3. java.util.concurrent.ThreadLocalRandom class should be used to generate random number in multithreaded environment. This class is part of Java Concurrent package and introduced in Java 1.7. This class has methods similar to Java Random class.

    应该使用java.util.concurrent.ThreadLocalRandom类在多线程环境中生成随机数。 此类是Java Concurrent包的一部分,并在Java 1.7中引入。 该类具有与Java Random类相似的方法。
  4. java.security.SecureRandom can be used to generate random number with strong security. This class provides a cryptographically strong random number generator. However, it’s slow in processing. So depending on your application requirements, you should decide whether to use it or not.

    java.security.SecureRandom可用于生成具有强大安全性的随机数。 此类提供了加密功能强的随机数生成器。 但是,它的处理速度很慢。 因此,根据您的应用程序要求,您应该决定是否使用它。

Java随机数生成器 (Java Random Number Generator)

Let’s look at some examples to generate a random number in Java. Later on, we will also look at ThreadLocalRandom and SecureRandom example program.

让我们看一些在Java中生成随机数的示例。 稍后,我们还将研究ThreadLocalRandom和SecureRandom示例程序。

1.生成随机整数 (1. Generate Random integer)

Random random = new Random();

int rand = random.nextInt();

Yes, it’s that simple to generate a random integer in java. When we create the Random instance, it generates a long seed value that is used in all the nextXXX method calls. We can set this seed value in the program, however, it’s not required in most of the cases.

是的,在Java中生成随机整数就这么简单。 当我们创建Random实例时,它将生成一个长种子值,该值将在所有nextXXX方法调用中使用。 我们可以在程序中设置该种子值,但是,在大多数情况下,并不是必需的。

//set the long seed value using Random constructor
Random random = new Random(123456789);

//set long seed value using setter method
Random random1 = new Random();
random1.setSeed(1234567890);

2. Java随机数介于1到10之间 (2. Java Random number between 1 and 10)

Sometimes we have to generate a random number between a range. For example, in a dice game possible values can be between 1 to 6 only. Below is the code showing how to generate a random number between 1 and 10 inclusive.

有时我们必须在一个范围之间生成一个随机数。 例如,在骰子游戏中,可能的值只能在1到6之间。 下面的代码显示了如何生成1到10之间的一个随机数。

Random random = new Random();
int rand = 0;
while (true){
    rand = random.nextInt(11);
    if(rand !=0) break;
}
System.out.println(rand);

The argument in the nextInt(int x) is excluded, so we have to provide argument as 11. Also, 0 is included in the generated random number, so we have to keep calling nextInt method until we get a value between 1 and 10. You can extend the above code to generate the random number within any given range.

排除了nextInt(int x)的参数,因此我们必须将参数提供为11。此外,在生成的随机数中包含0,因此我们必须继续调用nextInt方法,直到获得介于1和10之间的值。您可以扩展以上代码以生成任意给定范围内的随机数。

3.生成随机双 (3. Generate Random double)

We can use Math.random() or Random class nextDouble method to generate random double number in java.

我们可以使用Math.random()或Random类的nextDouble方法在Java中生成随机双数。

Random random = new Random();

double d = random.nextDouble();

double d1 = Math.random();

4.产生随机浮动 (4. Generate Random float)

Random random = new Random();

float f = random.nextFloat();

5.生成随机长 (5. Generate Random long)

Random random = new Random();

long l = random.nextLong();

6.生成随机布尔 (6. Generate Random boolean)

Random random = new Random();

boolean flag = random.nextBoolean();

7.生成随机字节数组 (7. Generate Random byte array)

We can generate random bytes and place them into a user-supplied byte array using Random class. The number of random bytes produced is equal to the length of the byte array.

我们可以生成随机字节,并使用Random类将其放入用户提供的字节数组中。 产生的随机字节数等于字节数组的长度。

Random random = new Random();

byte[] randomByteArray = new byte[5];

random.nextBytes(randomByteArray);

System.out.println(Arrays.toString(randomByteArray)); // sample output [-70, -57, 74, 99, -78]

8.多线程环境中的ThreadLocalRandom (8. ThreadLocalRandom in multithreaded environment)

Here is a simple example showing ThreadLocalRandom usage in a multithreaded environment.

这是一个简单的示例,显示了在多线程环境中ThreadLocalRandom的用法。

package com.journaldev.randomnumber;

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

public class ThreadLocalRandomExample {

	public static void main(String[] args) {
		Runnable runnable = new MyRunnable();

		for (int i = 0; i < 5; i++) {
			Thread t = new Thread(runnable);
			t.setName("MyRunnable-Thread-" + i);
			t.start();
		}
	}

}

class MyRunnable implements Runnable {

	@Override
	public void run() {
		String threadName = Thread.currentThread().getName();
		System.out.println(threadName + "::" + ThreadLocalRandom.current().nextInt());
	}

}

Below is a sample output of my execution of the above program.

以下是我执行上述程序的示例输出。

MyRunnable-Thread-0::-1744088963
MyRunnable-Thread-3::139405798
MyRunnable-Thread-1::1403710182
MyRunnable-Thread-2::-1222080205
MyRunnable-Thread-4::-185825276

We can’t set seed value for ThreadLocalRandom instance, it will throw UnsupportedOperationException.

我们无法为ThreadLocalRandom实例设置种子值,它将引发UnsupportedOperationException

ThreadLocalRandom class also has some extra utility methods to generate a random number within a range. For example, to generate a random number between 1 and 10, we can do it like below.

ThreadLocalRandom类还具有一些额外的实用程序方法来生成范围内的随机数。 例如,要生成一个1到10之间的随机数,我们可以像下面这样进行操作。

ThreadLocalRandom random = ThreadLocalRandom.current();
		
int rand = random.nextInt(1, 11);

ThreadLocalRandom has similar methods for generating random long and double values.

ThreadLocalRandom具有类似的生成随机long和double值的方法。

9. SecureRandom示例 (9. SecureRandom Example)

You can use SecureRandom class to generate more secure random numbers using any of the listed providers. A quick SecureRandom example code is given below.

您可以使用SecureRandom类使用列出的任何提供程序来生成更多安全的随机数。 下面是一个快速的SecureRandom示例代码。

Random random = new SecureRandom();

int rand = random.nextInt();

System.out.println(rand);

That’s all about generating a random number in Java program.

这就是在Java程序中生成随机数的全部内容。

GitHub Repository. GitHub Repository下载示例代码。

翻译自: https://www.journaldev/515/random-number-generator-java

随机数生成器 java

更多推荐

随机数生成器 java_Java中的随机数生成器