Java基础快速入门: Random 与猜数字游戏

本文纲要

  1. Random 基本使用
    什么是 Random
    使用步骤
    生成指定范围的随机数
  2. 猜数字游戏
    需求分析
    实现流程
    代码实现
    细节补充:无限循环与 break

Random 基本使用

1 ) 什么是 Random

Random 是 Java 内置的一个工具类,位于 java.util 包下,专门用来生成随机数。

比如我们要做一个随机点名器,或者需要生成一个随机密码,都可以通过 Random 来实现。

2 ) 使用步骤

使用 Random 和之前学过的 Scanner 非常相似,分为三步:

  1. 导包

    在类定义的上面写:

    java 复制代码
    import java.util.Random;
  2. 创建对象

    java 复制代码
    Random r = new Random();

其中 r 是变量名,可以自定义,其他部分固定不变。

  1. 获取随机数

    java 复制代码
    int 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 基础中非常经典且实用的练习,建议亲手敲一遍,加深理解。