random的常用方式

Python中的random模块用于生成随机数

1.random.random()

#用于生成一个0~1的随机浮点数:0<=n<1.0

>>> import random
>>> random.random()
0.8513446516720323
>>>

2.random.uniform(a,b) 

#用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a <b,则生成的随机数n: a <= n <= b。如果 a >b, 则 b <= n <= a。

>>> import random
>>> print(random.uniform(1,10))
9.959030833588626
>>> print(random.uniform(10,1))
1.6345933664294865
>>>

 

3.random.randint(a, b)

 #用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b

>>> import random
>>> random.randint(1,10)
2
>>>

4.random.randrange([start], stop[, step])
 #从指定范围内,按指定基数递增的集合中 获取一个随机数。

random.randrange(10, 30, 2),结果相当于从[10, 12, 14, 16, ... 26, 28]序列中获取一个随机数。random.randrange(10, 30, 2)在结果上与 random.choice(range(10, 30, 2) 等效。

 >>> import random

>>> print(random.randrange(10,30,2))
22
>>>

5.random.choice(sequence)

#参数sequence表示一个有序类型。从序列中获取一个随机元素.sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。

>>> lst = ['1503955', '1567359', '1562164', '1559030', '1562835']
>>> random.choice(lst)
'1559030'
>>>

6.random.sample(sequence, k)

#从指定序列中随机获取指定长度的片断并随机排列。sample函数不会修改原有序列。

>>> lst = ['1503955', '1567359', '1562164', '1559030', '1562835']
>>> random.sample(lst,1)
['1562835']
>>> random.sample(lst,2)
['1562164', '1559030']
>>>

 

7.random.shuffle(x[, random])

#用于将一个列表中的元素打乱,即将列表内的元素随机排列,,返回值为“None”

>>> import random
>>> lst = ['1503955', '1567359', '1562164', '1559030', '1562835']
>>> print(random.shuffle(lst))
None
>>> random.shuffle(lst)
>>> lst
['1562835', '1567359', '1562164', '1503955', '1559030']
>>> lst
['1562835', '1567359', '1562164', '1503955', '1559030']

转载于:https://www.cnblogs.com/fanjc/p/9815440.html

<think>我们讨论的是Java中的Random类。Random类用于生成伪随机数。以下是一些常用的方法及其使用示例。</think># Java Random常用方法详解 `java.util.Random` 类是Java中生成伪随机数的核心工具类,提供了多种生成随机数的方法。下面我将详细介绍Random类的常用方法及其使用场景。 ## 核心方法概览 | 方法 | 返回类型 | 范围 | 说明 | |------|----------|------|------| | `nextInt()` | int | -2³¹ ~ 2³¹-1 | 生成均匀分布的随机整数 | | `nextInt(int bound)` | int | 0 ~ bound-1 | 生成指定范围的随机整数 | | `nextDouble()` | double | 0.0 ~ 1.0 | 生成[0.0, 1.0)之间的随机浮点数 | | `nextFloat()` | float | 0.0f ~ 1.0f | 生成[0.0f, 1.0f)之间的随机浮点数 | | `nextLong()` | long | -2⁶³ ~ 2⁶³-1 | 生成随机长整数 | | `nextBoolean()` | boolean | true/false | 生成随机布尔值 | | `nextBytes(byte[] bytes)` | void | -128 ~ 127 | 生成随机字节数组 | | `nextGaussian()` | double | 高斯分布 | 生成均值为0.0、标准差为1.0的高斯分布值 | ## 完整代码示例 ```java import java.util.Random; public class RandomDemo { public static void main(String[] args) { // 创建Random实例 Random random = new Random(); // 1. 生成随机整数 int randomInt = random.nextInt(); System.out.println("随机整数: " + randomInt); // 2. 生成指定范围的随机整数 (0到99) int boundedInt = random.nextInt(100); System.out.println("0-99的随机整数: " + boundedInt); // 3. 生成随机浮点数 (0.0到1.0) double randomDouble = random.nextDouble(); System.out.println("0.0-1.0的随机浮点数: " + randomDouble); // 4. 生成随机浮点数 (0.0f到1.0f) float randomFloat = random.nextFloat(); System.out.println("0.0f-1.0f的随机浮点数: " + randomFloat); // 5. 生成长整型随机数 long randomLong = random.nextLong(); System.out.println("随机长整数: " + randomLong); // 6. 生成随机布尔值 boolean randomBoolean = random.nextBoolean(); System.out.println("随机布尔值: " + randomBoolean); // 7. 生成随机字节数组 byte[] randomBytes = new byte[5]; random.nextBytes(randomBytes); System.out.print("随机字节数组: "); for (byte b : randomBytes) { System.out.print(b + " "); } System.out.println(); // 8. 生成高斯分布随机数 double gaussian = random.nextGaussian(); System.out.println("高斯分布随机数: " + gaussian); // 9. 生成指定范围的随机数 (10到20) int min = 10, max = 20; int rangedInt = random.nextInt(max - min + 1) + min; System.out.println("10-20的随机整数: " + rangedInt); // 10. 生成随机字符串 String randomString = generateRandomString(random, 8); System.out.println("8位随机字符串: " + randomString); } // 生成随机字符串的实用方法 private static String generateRandomString(Random random, int length) { StringBuilder sb = new StringBuilder(length); String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (int i = 0; i < length; i++) { int index = random.nextInt(characters.length()); sb.append(characters.charAt(index)); } return sb.toString(); } } ``` ## 方法详解 ### 1. `nextInt()` - **功能**:生成均匀分布的随机整数 - **范围**:-2³¹ (-2,147,483,648) 到 2³¹-1 (2,147,483,647) - **示例**:`int num = random.nextInt();` ### 2. `nextInt(int bound)` - **功能**:生成[0, bound)之间的随机整数 - **重要**:bound必须为正数,否则抛出`IllegalArgumentException` - **示例**:生成0-9的随机数 `int dice = random.nextInt(6) + 1; // 1-6的骰子` ### 3. `nextDouble()` - **功能**:生成[0.0, 1.0)之间的双精度浮点数 - **精度**:53位随机位(IEEE 754双精度标准) - **应用场景**:概率计算、随机百分比 - **示例**:`double probability = random.nextDouble();` ### 4. `nextFloat()` - **功能**:生成[0.0f, 1.0f)之间的单精度浮点数 - **精度**:24位随机位(IEEE 754单精度标准) - **示例**:`float randomFloat = random.nextFloat();` ### 5. `nextLong()` - **功能**:生成随机长整数 - **范围**:-2⁶³到2⁶³-1 - **注意**:可能产生负数 - **示例**:`long id = Math.abs(random.nextLong()); // 生成非负ID` ### 6. `nextBoolean()` - **功能**:生成随机布尔值 - **概率**:true和false各50%概率 - **应用场景**:随机决策、布尔条件测试 - **示例**:`boolean decision = random.nextBoolean();` ### 7. `nextBytes(byte[] bytes)` - **功能**:填充随机字节到指定数组 - **应用场景**:生成加密密钥、随机令牌 - **示例**: ```java byte[] token = new byte[16]; random.nextBytes(token); ``` ### 8. `nextGaussian()` - **功能**:生成高斯分布(正态分布)随机数 - **分布特性**:均值0.0,标准差1.0 - **应用场景**:模拟自然现象、统计学实验 - **转换为自定义分布**: ```java double mean = 50.0; // 均值 double stdDev = 10.0; // 标准差 double value = mean + stdDev * random.nextGaussian(); ``` ## 高级用法与注意事项 ### 1. 种子(Seed)的重要性 ```java // 使用固定种子生成可重复的随机序列 Random predictableRandom = new Random(12345L); // 使用系统时间作为种子(默认行为) Random defaultRandom = new Random(); // 使用更安全的种子(Java 17+) Random secureRandom = new Random(System.nanoTime()); ``` ### 2. 生成特定范围的随机数 ```java // 生成[min, max]范围内的整数 public static int randInt(Random random, int min, int max) { return random.nextInt((max - min) + 1) + min; } // 生成[min, max)范围内的浮点数 public static double randDouble(Random random, double min, double max) { return min + (max - min) * random.nextDouble(); } ``` ### 3. 随机集合元素 ```java List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David"); // 随机选择集合元素 String randomName = names.get(random.nextInt(names.size())); // 随机打乱集合顺序 Collections.shuffle(names, random); ``` ### 4. 线程安全考虑 - `Random`是线程安全的,但多线程竞争时可能性能下降 - Java 7+推荐使用`ThreadLocalRandom`提高并发性能: ```java import java.util.concurrent.ThreadLocalRandom; int randomNum = ThreadLocalRandom.current().nextInt(1, 101); // 1-100 ``` ### 5. 加密安全随机数 - 对于安全敏感场景(如密码生成),使用`SecureRandom` ```java import java.security.SecureRandom; SecureRandom secureRandom = new SecureRandom(); byte[] secureBytes = new byte[32]; secureRandom.nextBytes(secureBytes); ``` ## 常见应用场景 1. **游戏开发**: ```java // 随机敌人属性 int enemyHealth = random.nextInt(50) + 50; // 50-100生命值 double attackPower = 5.0 + 10.0 * random.nextDouble(); // 5.0-15.0攻击力 ``` 2. **抽奖系统**: ```java List<String> participants = // 参与者列表 String winner = participants.get(random.nextInt(participants.size())); ``` 3. **测试数据生成**: ```java // 生成随机用户数据 String username = "user" + random.nextInt(10000); String email = username + "@example.com"; ``` 4. **随机算法**: ```java // 随机快速排序选择枢轴 int pivotIndex = low + random.nextInt(high - low + 1); ``` ## 性能与最佳实践 1. **避免重复创建Random实例**: ```java // 错误做法 - 每次调用都创建新实例 for (int i = 0; i < 100; i++) { Random r = new Random(); // 创建开销大 System.out.println(r.nextInt()); } // 正确做法 - 重用单个实例 Random random = new Random(); for (int i = 0; i < 100; i++) { System.out.println(random.nextInt()); } ``` 2. **选择合适的方法**: - 需要整数 → `nextInt()` - 需要浮点数 → `nextDouble()`或`nextFloat()` - 需要布尔值 → `nextBoolean()` - 需要非均匀分布 → `nextGaussian()` 3. **处理边界情况**: ```java // 安全处理bound为0的情况 public int safeNextInt(Random random, int bound) { if (bound <= 0) { throw new IllegalArgumentException("bound必须为正数"); } return random.nextInt(bound); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值