本文纲要
- Random 基本使用
什么是 Random
使用步骤
生成指定范围的随机数 - 猜数字游戏
需求分析
实现流程
代码实现
细节补充:无限循环与 break
Random 基本使用
1 ) 什么是 Random
Random 是 Java 内置的一个工具类,位于 java.util 包下,专门用来生成随机数。
比如我们要做一个随机点名器,或者需要生成一个随机密码,都可以通过 Random 来实现。
2 ) 使用步骤
使用 Random 和之前学过的 Scanner 非常相似,分为三步:
-
导包
在类定义的上面写:
javaimport java.util.Random; -
创建对象
javaRandom r = new Random();
其中 r 是变量名,可以自定义,其他部分固定不变。
-
获取随机数
javaint number = r.nextInt(10); // 范围:[0,10) 包含0,不包含10
number 是变量名,可以改变;10 是范围上限,可改;其他部分固定。
3 ) 生成指定范围的随机数
r.nextInt(n) 会生成 [0, n) 左闭右开区间的随机整数。
如果我们需要 1~10 之间的随机数(包含1和10),不能直接写 nextInt(11),因为那会生成 0~10。
正确做法:生成 0~9,再加 1,即:
java
int num = r.nextInt(10) + 1; // 范围 [1, 10]
代码示例(修正注释乱码后):
java
import java.util.Random;
public class Demo1Random {
public static void main(String[] args) {
// 创建 Random 对象
Random r = new Random();
// 循环10次,生成1~10之间的随机数
for (int i = 1; i <= 10; i++) {
int num = r.nextInt(10) + 1;
System.out.println(num);
}
}
}
猜数字游戏
1 ) 需求分析
程序自动生成一个 1~100 之间的整数,用户通过键盘输入猜测数字,程序根据猜测结果给予提示:
- 猜大了 → 提示"猜大了"
- 猜小了 → 提示"猜小了"
- 猜中了 → 提示"恭喜,猜中了"并结束游戏
因为无法预知用户几次能猜对,需要使用 死循环 反复进行猜测,猜对后通过 break 跳出。
2 ) 实现流程
#mermaid-svg-UX94DnahyCCkTVp0{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UX94DnahyCCkTVp0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UX94DnahyCCkTVp0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UX94DnahyCCkTVp0 .error-icon{fill:#552222;}#mermaid-svg-UX94DnahyCCkTVp0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UX94DnahyCCkTVp0 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UX94DnahyCCkTVp0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UX94DnahyCCkTVp0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UX94DnahyCCkTVp0 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UX94DnahyCCkTVp0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UX94DnahyCCkTVp0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UX94DnahyCCkTVp0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UX94DnahyCCkTVp0 .marker.cross{stroke:#333333;}#mermaid-svg-UX94DnahyCCkTVp0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UX94DnahyCCkTVp0 p{margin:0;}#mermaid-svg-UX94DnahyCCkTVp0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UX94DnahyCCkTVp0 .cluster-label text{fill:#333;}#mermaid-svg-UX94DnahyCCkTVp0 .cluster-label span{color:#333;}#mermaid-svg-UX94DnahyCCkTVp0 .cluster-label span p{background-color:transparent;}#mermaid-svg-UX94DnahyCCkTVp0 .label text,#mermaid-svg-UX94DnahyCCkTVp0 span{fill:#333;color:#333;}#mermaid-svg-UX94DnahyCCkTVp0 .node rect,#mermaid-svg-UX94DnahyCCkTVp0 .node circle,#mermaid-svg-UX94DnahyCCkTVp0 .node ellipse,#mermaid-svg-UX94DnahyCCkTVp0 .node polygon,#mermaid-svg-UX94DnahyCCkTVp0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UX94DnahyCCkTVp0 .rough-node .label text,#mermaid-svg-UX94DnahyCCkTVp0 .node .label text,#mermaid-svg-UX94DnahyCCkTVp0 .image-shape .label,#mermaid-svg-UX94DnahyCCkTVp0 .icon-shape .label{text-anchor:middle;}#mermaid-svg-UX94DnahyCCkTVp0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UX94DnahyCCkTVp0 .rough-node .label,#mermaid-svg-UX94DnahyCCkTVp0 .node .label,#mermaid-svg-UX94DnahyCCkTVp0 .image-shape .label,#mermaid-svg-UX94DnahyCCkTVp0 .icon-shape .label{text-align:center;}#mermaid-svg-UX94DnahyCCkTVp0 .node.clickable{cursor:pointer;}#mermaid-svg-UX94DnahyCCkTVp0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UX94DnahyCCkTVp0 .arrowheadPath{fill:#333333;}#mermaid-svg-UX94DnahyCCkTVp0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UX94DnahyCCkTVp0 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UX94DnahyCCkTVp0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UX94DnahyCCkTVp0 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UX94DnahyCCkTVp0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UX94DnahyCCkTVp0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UX94DnahyCCkTVp0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UX94DnahyCCkTVp0 .cluster text{fill:#333;}#mermaid-svg-UX94DnahyCCkTVp0 .cluster span{color:#333;}#mermaid-svg-UX94DnahyCCkTVp0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UX94DnahyCCkTVp0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UX94DnahyCCkTVp0 rect.text{fill:none;stroke-width:0;}#mermaid-svg-UX94DnahyCCkTVp0 .icon-shape,#mermaid-svg-UX94DnahyCCkTVp0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UX94DnahyCCkTVp0 .icon-shape p,#mermaid-svg-UX94DnahyCCkTVp0 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UX94DnahyCCkTVp0 .icon-shape .label rect,#mermaid-svg-UX94DnahyCCkTVp0 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UX94DnahyCCkTVp0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UX94DnahyCCkTVp0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UX94DnahyCCkTVp0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
是
否
开始
生成1~100随机数 randomNum
提示用户输入猜测数字
读取用户输入 num
num > randomNum?
输出"猜大了"
num < randomNum?
输出"猜小了"
输出"恭喜,猜中了"
break 结束循环
输出"感谢您的使用"
结束
3 ) 代码实现
java
import java.util.Scanner;
import java.util.Random;
public class Test {
public static void main(String[] args) {
// 1. 准备 Random 和 Scanner 对象
Random r = new Random();
Scanner sc = new Scanner(System.in);
// 2. 生成要猜的随机数 (1~100)
int randomNum = r.nextInt(100) + 1;
// 3. 使用死循环让用户反复猜测
while (true) {
// 提示输入
System.out.println("请输入您猜的数据:");
int num = sc.nextInt();
// 4. 比较并给出提示
if (num > randomNum) {
System.out.println("猜大了");
} else if (num < randomNum) {
System.out.println("猜小了");
} else {
System.out.println("恭喜,猜中了");
break; // 猜对,跳出循环
}
}
// 游戏结束后的提示
System.out.println("感谢您的使用");
}
}
细节补充:无限循环与 break
当 while(true) 循环内部 没有退出条件 时,循环下面的代码将永远无法执行,编译器会报错:"无法访问的语句"
本例中我们添加了 break,当猜中后执行 break,循环结束,后面的 System.out.println("感谢您的使用") 就可以被执行
因此,无限循环下面可以写代码,但前提是循环内部存在能让程序跳出循环的出口(如 break、return 等)
小结
通过这两个例子,我们掌握了 Random 类的基本用法,以及如何结合 Scanner 和循环、分支语句完成一个简单的猜数字游戏。
这些是 Java 基础中非常经典且实用的练习,建议亲手敲一遍,加深理解。