Java中的随机数生成器

时间:2020-02-23 14:35:32  来源:igfitidea点击:

在本教程中,我们将看到随机数生成器。
我们可能需要要求我们想要生成随机数以执行某些操作的要求。

例如:

假设我们正在创建一个使用骰子的游戏,用于每个玩家的点数。
只要播放器使用骰子,我们可以将逻辑生成随机数。

在示例的帮助下,有许多方法可以在Java.let中生成随机数。

使用随机类

我们可以使用java.util.random在Java中生成随机数。
我们可以使用随机类生成整数,浮点,双,布尔值等。

让我们通过示例来理解:

package org.igi.theitroad;
 
import java.util.Random;
 
public class RandomClassGeneratorMain {
 
	public static void main(String[] args) {
		Random randomGenerator=new Random();
		
		System.out.println("============================");
		System.out.println("Generating 5 random integers");
		System.out.println("============================");
		for (int i = 0; i < 5; i++) {
			System.out.println(randomGenerator.nextInt());
		}
		
		System.out.println("============================");
		System.out.println("Generating 5 random double");
		System.out.println("============================");
		for (int i = 0; i < 5; i++) {
			System.out.println(randomGenerator.nextDouble());
		}
		
		System.out.println("============================");
		System.out.println("Generating 5 random floats");
		System.out.println("============================");
		for (int i = 0; i < 5; i++) {
			System.out.println(randomGenerator.nextFloat());
		}
		
		System.out.println("============================");
		System.out.println("Generating 5 random booleans");
		System.out.println("============================");
		for (int i = 0; i < 5; i++) {
			System.out.println(randomGenerator.nextBoolean());
		}
	}
}

输出:

============================
Generating 5 random integers
============================
1342618771
-1849662552
1719085329
2141641685
-819134727
============================
Generating 5 random doubles
============================
0.1825454639005325
0.5331492085899436
0.830900901839756
0.8490109501015005
0.7968080535091425
============================
Generating 5 random floats
============================
0.9831014
0.24019146
0.11383718
0.42760438
0.019532561
============================
Generating 5 random booleans
============================
false
false
true
true
false

使用ThreadLocalRandom类

我们可以使用ThreadLocalRandom类生成随机数。
此类在Java 7中引入了Java 7. java.util.random是线程安全但多个线程尝试访问相同的对象,将存在很多争用和性能问题。
在ThreadLocalRandom的情况下会有很多争用和性能问题。
,每个线程都会生成自己的随机数,不会有任何争用。
让我们通过示例来理解:

package org.igi.theitroad;
 
import java.util.concurrent.ThreadLocalRandom;
 
public class ThreadLocalRandomMain {
 
	public static void main(String[] args) {
		
		System.out.println("============================");
		System.out.println("Generating 5 random integers");
		System.out.println("============================");
		for (int i = 0; i < 5; i++) {
			System.out.println(ThreadLocalRandom.current().nextInt());
		}
		
		System.out.println("============================");
		System.out.println("Generating 5 random doubles");
		System.out.println("============================");
		for (int i = 0; i < 5; i++) {
			System.out.println(ThreadLocalRandom.current().nextDouble());
		}
		
		System.out.println("============================");
		System.out.println("Generating 5 random floats");
		System.out.println("============================");
		for (int i = 0; i < 5; i++) {
			System.out.println(ThreadLocalRandom.current().nextFloat());
		}
		
		System.out.println("============================");
		System.out.println("Generating 5 random booleans");
		System.out.println("============================");
		for (int i = 0; i < 5; i++) {
			System.out.println(ThreadLocalRandom.current().nextBoolean());
		}
	}
}

输出:

============================
Generating 5 random integers
============================
-315342453
-1922639586
-19084346
-615337866
-1075097641
============================
Generating 5 random doubles
============================
0.9074981945011997
0.7626761438609163
0.4439078754038527
0.8663565773294881
0.8133933685024771
============================
Generating 5 random floats
============================
0.50696343
0.4109127
0.4284398
0.37340754
0.28446126
============================
Generating 5 random booleans
============================
false
true
false
false
true

使用math.random方法

我们可以使用math.random的方法生成随机双打。

package org.igi.theitroad;
 
public class MathRandomMain {
 
	public static void main(String[] args) {
		
		System.out.println("============================");
		System.out.println("Generating 5 random doubles");
		System.out.println("============================");
		for (int i = 0; i < 5; i++) {
			System.out.println(Math.random());
		}
	}
}

输出:

============================
Generating 5 random doubles
============================
0.3644159931296438
0.07011727069753859
0.7602271011682066
0.914594143579762
0.6506514073704143

在范围之间产生随机数

如果要在某个范围之间生成随机数,则可以使用随机和ThreadLocalRandom来执行此操作。

package org.igi.theitroad;
 
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
 
public class GenerateRandomInRangeMain {
 
	public static void main(String[] args) {
		
		int minimum=10;
		int maximum=20;
		
		System.out.println("============================");
		System.out.println("Generating 5 random integer in range of 10 to 20 using Random");
		System.out.println("============================");
		Random randomGenerator=new Random();
		for (int i = 0; i < 5; i++) {
			System.out.println(randomGenerator.nextInt((maximum - minimum) + 1) + minimum);
		}
		System.out.println("============================");
		System.out.println("Generating 5 random integer in range of 10 to 20 using ThreadLocalRandom");
		System.out.println("============================");
		for (int i = 0; i < 5; i++) {
			System.out.println(ThreadLocalRandom.current().nextInt(minimum,maximum+1));
		}
		
		System.out.println("============================");
		System.out.println("Generating 5 random integer in range of 10 to 20 using Math.random");
		System.out.println("============================");
		for (int i = 0; i < 5; i++) {
			System.out.println(minimum + (int)(Math.random() * ((maximum - minimum) + 1)));
		}
	}
}

输出:

============================
Generating 5 random integer in range of 10 to 20 using Random
============================
11
18
14
13
15
============================
Generating 5 random integer in range of 10 to 20 using ThreadLocalRandom
============================
10
12
13
13
16
============================
Generating 5 random integer in range of 10 to 20 using Math.random
============================
14
10
16
20
15