本课作品
制作会变化的控制台玩家状态栏
欢迎屏里的玩家名一直写死成 Alex。如果来了另一位玩家,每处名字都要重新找一遍。变量给了我们更好的办法:把数据放在有名字的位置,读取它,也更新它。这一课要弄明白的,不只是“怎么写变量”,还有“它在这一刻究竟保存了什么”。
开始前:建议先完成第 1 课
01 / 10
标签帮我们找到当前的值

史蒂夫把面包放进没有标签的箱子,晚饭时间却打开了圆石箱。变量名解决的是类似问题:让程序找到需要的数据。它不是数据本身,而是访问数据的名字。
先从两种类型开始:int 保存整数,String 保存文字。生命值、物品数量适合整数;玩家名适合文字。更多类型下一课再展开。
02 / 10
声明、初始化、读取
- int类型 · 保存整数
- health变量名 · 找到当前的值
- =赋值号 · 把右侧值写入
- 20初始值 · 第一次存入的值
- ;分号 · 结束本条语句
完整程序 · PlayerStatus.java
public class PlayerStatus {
public static void main(String[] args) {
String playerName = "Alex";
int health = 20;
int bread = 3;
System.out.println(playerName + " 生命=" + health);
System.out.println("面包=" + bread);
}
}运行结果
Alex 生命=20
面包=3health 不加引号时,读取变量的值;"health" 加上引号后,只是一段固定文字。把玩家名改成 Steve、面包改成5,先猜两行输出,再运行。
03 / 10
赋值:先算右边,再写左边

- 读取旧值bread 是 3
- 计算右侧3 - 1 得到 2
- 写回左侧bread 变成 2
片段:放在 main 中,单独运行
int bread = 3;
System.out.println("吃之前=" + bread);
bread = bread - 1;
System.out.println("吃之后=" + bread);
int diamonds = 0;
diamonds = diamonds + 3;
System.out.println("钻石=" + diamonds);运行结果
吃之前=3
吃之后=2
钻石=304 / 10
一次输出,就是一张快照
| 变量名 | 类型 | 当前值 |
|---|---|---|
| playerName | String | "Alex" |
| health | int | 20 |
| bread | int | 3 |
| diamondCount | int | 0 |
先前输出的那一行文字不会跟着变量变动。想展示新状态,要再次输出。重新运行程序时,初始化语句也会重新执行。
片段:放在 main 中,单独运行
int chestA = 5;
int chestB = chestA;
chestA = 9;
System.out.println("A=" + chestA);
System.out.println("B=" + chestB);运行结果
A=9
B=505 / 10
沿着时间线更新生命值
- 出生health = 20
- 受伤health - 4
得到 16 - 进食health + 3
得到 19 - 恢复初值health = 20
片段:放在 main 中,单独运行
int health = 20;
System.out.println("出生=" + health);
health = health - 4;
System.out.println("受伤=" + health);
health = health + 3;
System.out.println("进食=" + health);
health = 20;
System.out.println("恢复初值=" + health);
int arrows = 10;
arrows += 5;
arrows -= 2;
System.out.println("箭=" + arrows);运行结果
出生=20
受伤=16
进食=19
恢复初值=20
箭=1306 / 10
好名字让代码自己解释自己
| 例子 | 判断 |
|---|---|
| playerName | 清楚,使用 camelCase |
| diamondCount | 说明这是钻石数量 |
| 2player | 错误:不能以数字开头 |
| player health | 错误:名字不能有空格 |
| class | 错误:这是 Java 关键字 |
| x | 可以运行,但用途不清楚 |
初学时,建议小写英文字母开头,多个单词使用 camelCase:第一个单词小写,后续单词首字母大写。Java 区分大小写,health 和 Health 不是同一个名字。
片段:放在 main 中,单独运行
int playerLevel = 8;
int torchCount = 24;
String petName = "Snow";
System.out.println(playerLevel + " / " + torchCount);
System.out.println(petName);运行结果
8 / 24
Snow07 / 10
变量排错:先分清是哪一种问题

故意写错:三个不同的问题
int 2player = 10;
int bread = 3;
int bread = 2;
int diamonds;
System.out.println(diamonds);- 2player 以数字开头,改成 playerLevel。
- 同一作用域重复声明 bread:更新时去掉第二个 int。
- 局部变量 diamonds 还没有值:读取前明确赋值。
片段:放在 main 中,单独运行
int playerLevel = 10;
int bread = 3;
bread = 2;
int diamonds = 0;
System.out.println(playerLevel + " / " + bread + " / " + diamonds);运行结果
10 / 2 / 008 / 10
设计会变化的玩家状态栏

- 创建变量名字、生命
面包、钻石 - 出生快照先输出初始值
- 事件更新受伤、补给
与挖矿 - 再次输出核对新数值
这次作品不需要输入、循环或条件判断。只用已经学过的声明、赋值和输出,就能观察数据随事件变化。每一次更新前,先把预期值写在纸上。
- 出生:生命20、面包3、钻石0。
- 受伤:生命减4,其余不变。
- 补给与挖矿:生命加3、面包减1、钻石加3。
09 / 10
完整作品与输出核对
完整程序 · AdventureStatus.java
public class AdventureStatus {
public static void main(String[] args) {
String playerName = "Alex";
int health = 20;
int bread = 3;
int diamondCount = 0;
System.out.println("出生 | " + playerName
+ " | 生命=" + health + " | 面包=" + bread
+ " | 钻石=" + diamondCount);
health = health - 4;
System.out.println("受伤 | " + playerName
+ " | 生命=" + health + " | 面包=" + bread
+ " | 钻石=" + diamondCount);
health = health + 3;
bread = bread - 1;
diamondCount = diamondCount + 3;
System.out.println("补给与挖矿 | " + playerName
+ " | 生命=" + health + " | 面包=" + bread
+ " | 钻石=" + diamondCount);
}
}运行结果
出生 | Alex | 生命=20 | 面包=3 | 钻石=0
受伤 | Alex | 生命=16 | 面包=3 | 钻石=0
补给与挖矿 | Alex | 生命=19 | 面包=2 | 钻石=310 / 10
带着预测继续练习

- 声明类型与名字
- 初始化第一次赋值
- 读取当前的值
- 更新计算再写回
- 解释比较前后快照
任选一个任务
- 基础:声明五种物品数量,输出一张背包清单。
- 进阶:铁锭从0开始,获得8个、用掉3个、再得到2个;三次输出应为8、5、7。
- 创造:设计宠物狼状态栏,模拟喂食和消耗骨头。
选学:两个箱子交换内容
片段:放在 main 中,单独运行
int leftChest = 12, rightChest = 30;
int temporary = leftChest;
leftChest = rightChest;
rightChest = temporary;
System.out.println(leftChest + " / " + rightChest);运行结果
30 / 12temporary 先保住原来的12。下一课会让我们认识更多类型,并解释为什么整数、小数、真假和文字不能随意混装。
TAKE IT WITH YOU
下载本课 PDF
完整课文、代码、图解与练习,选择你需要的语言。
