Skip to content

Commit ec66761

Browse files
committed
/Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/32.md /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/23.assets /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/23.md /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/24.md /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/25.assets /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/25.md /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/26.md /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/27.assets /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/27.md /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/28.md /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/29.assets /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/29.md /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/30.assets /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/30.md /Users/huangjiabao/bornforthis.cn/docs/column/Java/chapter02/31.md
1 parent 1e86aed commit ec66761

File tree

4 files changed

+443
-0
lines changed

4 files changed

+443
-0
lines changed

src/Java/.DS_Store

0 Bytes
Binary file not shown.

src/Java/chapter02/.DS_Store

0 Bytes
Binary file not shown.

src/Java/chapter02/31.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,15 +241,76 @@ public class RandomString {
241241

242242
## 9. 生成指定范围的随机数讲解
243243

244+
在 Java 中,`Random` 类的 `nextInt(int bound)` 方法默认生成 `[0, bound-1]` 范围内的随机整数。如果要生成指定范围 `[min, max]` 的随机数,可以通过以下公式实现:
244245

246+
```java
247+
int randomNumber = min + random.nextInt(max - min + 1);
248+
```
249+
250+
### 9.1 公式推导
251+
252+
1. `random.nextInt(n)`:默认会生成 `[0, n-1]` 范围的整数,`n` 是一个正整数。
253+
254+
2. 为了生成 `[min, max]` 范围的整数,我们将目标范围 `[min, max]` 的大小定义为:
255+
256+
```java
257+
范围大小 = max - min + 1
258+
```
259+
260+
- `max - min` 表示 `max``min` 之间的差值(即区间内的元素个数减1)。
261+
-`1` 是因为范围是 **闭区间**,包括了 `max` 本身。
262+
- 具体例子:
263+
- 我要取:2~6之间的随机整数,也就是:`[2, 3, 4, 5, 6]` 一共 5 个元素;「min:2、max:6」
264+
- 要计算有几个元素:$\text{max - min} = 6 - 2 = 4$ 差一个元素,所以需要 $+1$;
265+
266+
3. `random.nextInt(max - min + 1)`:会生成 `[0, max - min]` 范围内的整数。
245267

268+
4. 加上 `min`:将 `[0, max - min]` 范围整体平移到 `[min, max]` 范围。
269+
270+
```java
271+
randomNumber = min + random.nextInt(max - min + 1);
272+
```
246273

247274

248275

276+
### 9.2 示例:推导 `[5, 15]` 的随机数
249277

278+
- `max = 15``min = 5`
279+
- 范围大小:`15 - 5 + 1 = 11`
280+
- `random.nextInt(11)`:生成 `[0, 10]` 范围的整数。
281+
- 加上 `5`:结果范围变为 `[5, 15]`
250282

283+
### 9.3 示例代码:生成指定范围的随机数
284+
285+
```java
286+
import java.util.Random;
287+
288+
public class RandomRangeExample {
289+
public static void main(String[] args) {
290+
Random random = new Random();
291+
int min = 5;
292+
int max = 15;
293+
294+
// 生成 [min, max] 范围的随机数
295+
int randomNumber = min + random.nextInt(max - min + 1);
296+
System.out.println("生成的随机数 (范围: " + min + "" + max + "): " + randomNumber);
297+
}
298+
}
299+
```
300+
301+
### 9.4 输出示例
302+
303+
```java
304+
生成的随机数 (范围: 515): 12
305+
```
251306

307+
### 9.5 总结
252308

309+
- 使用 `nextInt(int bound)` 方法实现基本随机数生成。
310+
- 通过公式 `min + random.nextInt(max - min + 1)` 可以灵活生成 `[min, max]` 范围的随机整数。
311+
- **关键点**
312+
- `max - min + 1` 计算出范围的大小。
313+
-`min` 将结果平移到目标范围。
253314

254315

255316

0 commit comments

Comments
 (0)