在 Java 中,Random 类用于生成随机数。它是 java.util 包的一部分,可以生成不同类型的随机数,例如整数、浮点数、布尔值等。Random 类的实例可以用来产生各种随机数据,广泛应用于游戏、测试、加密、数据模拟等场景。
1. 创建 Random 对象
要使用 Random 类,首先需要创建一个 Random 类的实例。你可以通过以下方式创建:
import java.util.Random;public class RandomExample {public static void main(String[] args) {Random random = new Random(); // 创建一个随机数生成器}
}
你也可以传递一个种子值(seed),这样每次使用相同的种子生成的随机数序列都是一样的:
Random randomWithSeed = new Random(12345); // 使用种子值
2. 生成不同类型的随机数
Random 类提供了多个方法来生成不同类型的随机数。
- 生成整数(int)
使用 nextInt() 方法可以生成一个随机的整数。它可以接受一个参数作为范围限制,生成一个从 0 到指定数值(不包括该数值)之间的随机整数。
int randInt = random.nextInt(); // 生成一个随机的整数(范围很大)
int randIntRange = random.nextInt(100); // 生成一个 0 到 99 之间的随机整数
- 生成布尔值(boolean)
使用 nextBoolean() 方法可以生成一个随机的布尔值,返回 true 或 false。
boolean randBool = random.nextBoolean();
- 生成浮点数(float 和 double)
使用 nextFloat() 或 nextDouble() 方法生成一个随机的浮点数。
- nextFloat() 生成一个 [0.0, 1.0) 之间的浮点数。
- nextDouble() 生成一个 [0.0, 1.0) 之间的双精度浮点数。
float randFloat = random.nextFloat(); // 生成一个 0.0 到 1.0 之间的随机浮点数
double randDouble = random.nextDouble(); // 生成一个 0.0 到 1.0 之间的随机双精度浮点数
- 生成长整数(long)
使用 nextLong() 方法生成一个随机的长整数(long)。
long randLong = random.nextLong();
- 生成字节数组(byte[])
Random 还提供了 nextBytes(byte[] bytes) 方法,用于填充一个字节数组,生成随机字节。
byte[] byteArray = new byte[10];
random.nextBytes(byteArray); // 将 byteArray 填充为 10 个随机字节
3. 使用 Random 生成指定范围的随机数
有时我们需要生成一个指定范围内的随机数,例如 1 到 100 之间的整数。可以通过 nextInt() 方法来实现。
public class RandomRangeExample {public static void main(String[] args) {Random random = new Random();// 生成一个 1 到 100 之间的随机整数(包含 1 和 100)int min = 1;int max = 100;int randInRange = random.nextInt(max - min + 1) + min;System.out.println("Random number between 1 and 100: " + randInRange);}
}
方法2
用来生成任意数到任意数之间的随机数 7–15
1 让这个范围头尾都减去一个值,让这个范围从0开始 -7 (0–8)
2 尾巴加一 8+1=9
3 最终结果,再加上第一步减去的值
int unmber = r.nextInt(9)+7
4. ThreadLocalRandom 类
在多线程环境下,使用 Random 可能会导致线程间的竞争,因为多个线程共享同一个 Random 实例。为了解决这个问题,Java 提供了 ThreadLocalRandom 类,它为每个线程提供独立的随机数生成器。
import java.util.concurrent.ThreadLocalRandom;public class ThreadLocalRandomExample {public static void main(String[] args) {// 使用 ThreadLocalRandom 生成随机数int randInRange = ThreadLocalRandom.current().nextInt(1, 101); // 生成 1 到 100 之间的随机整数System.out.println("Random number between 1 and 100: " + randInRange);}
}
5. SecureRandom 类
如果你需要生成加密级别的随机数(例如用于密码、令牌等),可以使用 SecureRandom 类。它提供比 Random 更加安全的随机数生成方法。
import java.security.SecureRandom;public class SecureRandomExample {public static void main(String[] args) {SecureRandom secureRandom = new SecureRandom();// 生成一个 [0, 100] 范围的安全随机整数int rand = secureRandom.nextInt(101); // 生成 0 到 100 之间的安全随机整数System.out.println("Secure random number: " + rand);}
}