第3周详细教程
第三章:条件分支、循环结构、数组与常见调试方法
本章进入程序逻辑核心。条件分支用于“做选择”,循环结构用于“重复执行”,数组用于“批量存储同类数据”,调试方法用于“快速定位错误”。
在 Fabric MOD 开发中,这四项能力会直接用于事件判断、掉落表处理、生物行为控制、批量方块扫描与性能优化。
本章目录
3.1 条件分支
条件分支用于根据不同情况执行不同代码。最常用结构包括 `if`、`if-else`、`if-else if-else` 和 `switch`。
3.1.1 if 结构
int health = 6;
if (health <= 8) {
System.out.println("警告:血量偏低");
}
3.1.2 if-else 结构
boolean hasKey = true;
if (hasKey) {
System.out.println("门已开启");
} else {
System.out.println("缺少钥匙");
}
3.1.3 多分支判断
int score = 87;
if (score >= 90) {
System.out.println("评级:S");
} else if (score >= 75) {
System.out.println("评级:A");
} else {
System.out.println("评级:B");
}
3.1.4 switch 结构
int mode = 2;
switch (mode) {
case 1:
System.out.println("生存模式");
break;
case 2:
System.out.println("创造模式");
break;
default:
System.out.println("未知模式");
}
3.2 循环结构
循环用于重复执行代码块。常见循环有 `for`、`while`、`do-while`。选择依据是“是否已知循环次数”。
| 循环类型 | 典型场景 | 特点 |
|---|---|---|
| for | 已知次数遍历 | 结构紧凑 |
| while | 条件驱动循环 | 先判断后执行 |
| do-while | 至少执行一次 | 先执行后判断 |
3.2.1 for 示例
for (int i = 1; i <= 5; i++) {
System.out.println("第 " + i + " 波怪物生成");
}
3.2.2 while 示例
int energy = 3;
while (energy > 0) {
System.out.println("执行技能,剩余能量: " + energy);
energy--;
}
3.2.3 break 与 continue
for (int i = 1; i <= 10; i++) {
if (i == 4) {
continue; // 跳过第4次
}
if (i == 8) {
break; // 提前结束循环
}
System.out.println(i);
}
循环中应保证终止条件可达,避免死循环导致程序卡住。
3.3 数组
数组用于按顺序存储同一种类型的数据。数组下标从 `0` 开始,最后一个元素下标为 `length - 1`。
3.3.1 声明与初始化
int[] damages = {5, 8, 12, 15};
String[] mobs = {"Zombie", "Skeleton", "Creeper"};
3.3.2 访问与修改
System.out.println(damages[0]); // 5
damages[2] = 14; // 修改第三个元素
3.3.3 遍历数组
for (int i = 0; i < mobs.length; i++) {
System.out.println("怪物类型: " + mobs[i]);
}
3.3.4 常见错误:数组越界
int[] nums = {1, 2, 3};
// System.out.println(nums[3]); // 越界,最大下标是2
3.4 常见调试方法
调试是开发过程中验证逻辑正确性的关键步骤。下列方法可用于快速定位问题。
3.4.1 打印变量法
int hp = 20;
System.out.println("[DEBUG] hp=" + hp);
3.4.2 分段验证法
将复杂逻辑拆成多个小步骤,每一步输出结果并验证,再进入下一步。
3.4.3 边界值检查
对 `0`、`1`、最大值、最小值、空数组等边界场景进行单独测试。
3.4.4 典型报错识别
- `NullPointerException`:对象为空。
- `ArrayIndexOutOfBoundsException`:数组下标越界。
- 编译错误:变量未声明、分号缺失、类型不匹配。
3.5 综合示例
示例:怪物波次处理程序
public class WaveDemo {
public static void main(String[] args) {
String[] mobs = {"Zombie", "Skeleton", "Creeper", "Spider"};
for (int wave = 1; wave <= 4; wave++) {
System.out.println("=== 第 " + wave + " 波 ===");
String mob = mobs[wave - 1];
if (mob.equals("Creeper")) {
System.out.println("提示:本波含爆炸单位");
}
for (int i = 1; i <= 3; i++) {
System.out.println("生成 " + mob + " #" + i);
}
}
}
}
该示例综合使用了数组、双层循环和条件分支,可直接迁移到刷怪逻辑的原型开发。
3.6 在 Fabric MOD 中的应用
- 条件分支:根据玩家状态触发不同技能或效果。
- 循环结构:批量注册方块、批量处理实体、批量检查范围。
- 数组:维护掉落物列表、任务目标列表、属性模板表。
- 调试方法:定位事件未触发、参数异常、性能瓶颈。
if (playerLevel >= 10) {
for (int i = 0; i < rewards.length; i++) {
System.out.println("获得奖励: " + rewards[i]);
}
} else {
System.out.println("等级不足,无法领取奖励");
}
3.7 本章小结
- 条件分支用于表达选择逻辑。
- 循环结构用于重复执行任务。
- 数组用于管理同类批量数据。
- 调试方法用于快速定位与修复问题。
完成本章后,已具备实现中等复杂度 Java 逻辑的基础能力,可进入更完整的 MOD 功能模块开发。