java学习--for循环、if判断、switch、while、do-while
在 Java 中,for循环、if判断、switch、while、do-while都是用于控制程序流程的核心结构,分别适用于不同的场景。以下是详细讲解:
1. if 判断:条件分支
作用:根据条件的真假执行不同的代码块,是最基础的分支控制语句。语法:
if (条件表达式) {// 条件为true时执行的代码
} else if (条件表达式2) { // 可选// 条件1为false,条件2为true时执行
} else { // 可选// 所有条件都为false时执行
}
特点:
- 条件表达式必须是布尔类型(
true/false)。 - 多个
else if可以串联,用于多条件判断。 - 若代码块只有一行,可省略大括号(但不推荐,易出错)。
示例:
int score = 85;
if (score >= 90) {System.out.println("优秀");
} else if (score >= 60) {System.out.println("及格");
} else {System.out.println("不及格");
}
// 输出:及格
2. switch:多值匹配分支
作用:根据一个变量(或表达式)的取值,匹配多个分支并执行对应代码,替代多条件if-else,代码更简洁。语法:
switch (变量/表达式) {case 值1:// 变量等于值1时执行break; // 可选,跳出switch(不写会穿透到下一个case)case 值2:// 变量等于值2时执行break;...default: // 可选// 所有case都不匹配时执行
}
特点:
- 支持的变量类型:
byte、short、int、char,以及枚举(Enum)、字符串(String,Java 7+)。 break的作用:执行完当前 case 后跳出switch,否则会继续执行下一个 case(称为 “穿透”)。default可选,位置灵活(通常放最后)。
示例:
String day = "周二";
switch (day) {case "周一":case "周二":case "周三":case "周四":case "周五":System.out.println("工作日");break;case "周六":case "周日":System.out.println("休息日");break;default:System.out.println("无效日期");
}
// 输出:工作日(利用穿透简化多个值的相同逻辑)
3. while 循环:条件满足时重复执行
作用:当条件为true时,反复执行循环体,直到条件为false时停止。语法:
while (循环条件) {// 循环体(要重复执行的代码)
}
特点:
- 先判断,后执行:首次条件为
false时,循环体一次都不执行。 - 循环条件必须是布尔类型,且循环体内需有改变条件的逻辑(否则会无限循环)。
示例:
int count = 0;
// 打印1~5
while (count < 5) {count++; // 改变条件的逻辑(避免死循环)System.out.println(count);
}
// 输出:1 2 3 4 5
4. do-while 循环:至少执行一次的循环
作用:与while类似,但先执行一次循环体,再判断条件,确保循环体至少执行一次。语法:
do {// 循环体
} while (循环条件); // 注意末尾有分号
特点:
- 先执行,后判断:无论条件是否成立,循环体至少执行一次。
- 其他特性与
while一致(需在循环体内改变条件)。
示例:
int num;
do {num = (int) (Math.random() * 10); // 生成0~9的随机数System.out.println("随机数:" + num);
} while (num != 5); // 直到随机数等于5才停止
// 输出:至少打印一次,直到出现5为止
5. for 循环:已知循环次数的场景
作用:适用于明确循环次数的场景,将 “初始化、循环条件、迭代逻辑” 集中声明,结构更清晰。语法:
for (初始化语句; 循环条件; 迭代语句) {// 循环体
}
执行顺序:
- 执行一次
初始化语句(通常定义循环变量)。 - 判断
循环条件:若为true,执行循环体;若为false,退出循环。 - 执行
迭代语句(通常更新循环变量)。 - 重复步骤 2 和 3。
特点:
- 初始化语句仅执行一次,迭代语句在每次循环体结束后执行。
- 支持空语句(如
for (;;)表示无限循环)。 - Java 5 + 支持 “增强 for 循环”(foreach),用于遍历数组或集合。
示例 1:普通 for 循环
// 打印1~5的平方
for (int i = 1; i <= 5; i++) {System.out.println(i * i);
}
// 输出:1 4 9 16 25
示例 2:增强 for 循环(遍历数组)
String[] fruits = {"苹果", "香蕉", "橙子"};
for (String fruit : fruits) { // 遍历数组中每个元素,赋值给fruitSystem.out.println(fruit);
}
// 输出:苹果 香蕉 橙子
总结:适用场景对比
| 结构 | 核心作用 | 典型场景 |
|---|---|---|
if | 单条件 / 多条件分支判断 | 根据分数评级、权限判断等 |
switch | 多值匹配分支 | 菜单选择、日期 / 月份判断等固定值场景 |
while | 未知循环次数,条件满足时循环 | 等待用户输入、处理动态数据直到结束 |
do-while | 至少执行一次的循环 | 游戏初始化、用户交互确认(先执行再判断) |
for | 已知循环次数,或遍历数组 / 集合 | 固定次数的迭代、数组 / 集合遍历 |
选择时需根据具体需求:分支判断用if/switch,循环用while/do-while/for,其中for在次数明确时更简洁,do-while适合必须执行一次的场景。
