弗兰的悲惨之旅
99.73M · 2026-04-04
前言
"学 Java 的时候,我一直以为流程控制就是简单的 if 和 for,直到写了一个复杂的业务逻辑,才发现代码变得越来越混乱,到处都是嵌套的条件和循环,根本无法维护。"
今天这篇,我把 Java 流程控制一次性讲清楚,都是我亲测过的经验教训,帮你彻底告别逻辑混乱的代码。
本文你将获得:
把流程控制比作交通信号灯,一秒就懂了:
官方定义是:流程控制语句是用来控制程序执行流程的语句,通过这些语句,程序可以根据不同的条件执行不同的代码,或者重复执行某段代码。
是什么:if 语句是最基本的分支语句,用于根据条件执行不同的代码块。
怎么用:
if(条件表达式){ 语句体 }if(条件表达式){ 语句体1 }else { 语句体2 }if(条件表达式1){ 语句体1 }else if(条件表达式2){ 语句体2 }...else { 语句体n+1 }注意事项:
代码示例:
public static void ifDemo1() {
System.out.println("----开始----");
System.out.println("if的第一种格式");
int age = 19;
if (age >= 18) {
System.out.println("可以投票");
}
System.out.println("----结束----");
}
是什么:switch 语句通过匹配某个值,执行对应的代码块。
怎么用:
switch (将要匹配的值) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
注意事项:
代码示例:
public static void printWeek(int day) {
switch (day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("您的输入有误");
break;
}
}
是什么:for 循环可以让一段代码重复执行很多次,适合已知循环次数的场景。
怎么用:
for(初始化语句; 条件判断语句; 条件控制语句){
循环体
}
注意事项:
代码示例:
public static void demo1() {
System.out.println("倒计时5秒:");
for (int i = 1; i <=5; i++) {
System.out.println(i);
}
}
是什么:while 循环用于重复执行代码块,适合不知道循环次数的场景。
怎么用:
初始化语句;
while(判断语句){
循环体语句;
控制语句;
}
注意事项:
代码示例:
public static void whileDemo() {
int a=1;
while(a<=5){
System.out.println("Hello World");
a++;
}
}
是什么:do...while 循环先执行后判断,至少执行一次循环体。
怎么用:
初始化语句;
do{
循环体语句;
条件控制语句;
}(循环条件);
代码示例:
public static void doWhileDemo() {
int a = 1;
do {
System.out.println("Hello World");
a++;
} while (a <= 5);
}
是什么:
continue:跳过某次循环体内容的执行,继续下一次的执行break:终止循环体内容的执行,结束当前的整个循环注意事项:
break 只能在循环和 switch 当中进行使用continue 只能在循环中进行使用代码示例:
public static void continueDemo() {
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
System.out.println("老师正在给第" + i + "位同学发作业!");
}
}
public static void breakDemo(){
for (int i = 9; i <= 12; i++) {
if(i == 11){
System.out.println("今天到" + i + "点下班");
break;
}
System.out.println("现在是" + i + "点,工作进行中...");
}
}
是什么:Random 类用于生成随机数。
怎么用:
nextInt() - 生成一个 int 范围内的随机整数nextInt(int bound) - 生成[0, bound) 范围内的随机整数nextDouble() - 生成[0.0, 1.0) 范围内的随机小数nextBoolean() - 生成随机布尔值注意事项:
nextInt(100) + 1 才能生成 1-100 的随机数,因为范围是左闭右开 [0, 100)。代码示例:
import java.util.Random;
public static void randomDemo() {
Random r = new Random();
int num = r.nextInt(100) + 1;
System.out.println("随机整数: " + num);
}
| 对比维度 | for 循环 | while 循环 | do...while 循环 |
|---|---|---|---|
| 执行顺序 | 先判断后执行 | 先判断后执行 | 先执行后判断 |
| 适用场景 | 已知循环次数 | 未知循环次数 | 至少执行一次 |
| 变量作用域 | 循环内 | 循环外可访问 | 循环外可访问 |
"学到这你可能有疑问:循环嵌套看起来很复杂,为什么需要它?"
原因是:
需求描述:根据考试成绩发放不同奖励
代码实现:
public class IFDemo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入考试成绩:");
int score = sc.nextInt();
getReward(score);
}
public static void getReward(int score) {
if (score >= 90) {
System.out.println("奖励5000");
} else if (score >= 80) {
System.out.println("奖励3000");
} else if (score >= 70) {
System.out.println("奖励1000");
} else if (score >= 60) {
System.out.println("奖励500");
} else {
System.out.println("奖励大嘴巴子");
}
}
}
运行结果:
请输入考试成绩:95
奖励5000
需求描述:电脑生成1-100的随机数,玩家有三次机会猜测,程序提示猜大了还是猜小了,猜对或用完次数后游戏结束。
代码实现:
import java.util.Random;
import java.util.Scanner;
public class RandomDemo2 {
public static void main(String[] args) {
System.out.print("开始游戏!请输入一个100以内的数字,你有三次机会:");
guessNum();
}
public static void guessNum() {
Random r = new Random();
Scanner sc = new Scanner(System.in);
int random = r.nextInt(100) + 1;
int count = 3;
while (count > 0) {
System.out.print("请输入数字(剩余" + count + "次):");
if (!sc.hasNextInt()) {
System.out.println("输入无效,请输入整数!");
sc.next();
continue;
}
int num = sc.nextInt();
if (random == num) {
System.out.println("恭喜你,猜对了!!!");
System.out.println("你猜了 " + (4 - count) + " 次");
return;
} else if (random < num) {
System.out.println("猜大了");
} else {
System.out.println("猜小了");
}
count--;
}
System.out.println("游戏结束!正确答案是 " + random);
}
}
运行结果:
开始游戏!请输入一个100以内的数字,你有三次机会:请输入数字(剩余3次):50
猜大了
请输入数字(剩余2次):25
猜小了
请输入数字(剩余1次):37
恭喜你,猜对了!!!
你猜了 3 次
需求描述:使用循环嵌套打印直角三角形。
代码实现:
// 样式1:倒直角三角形
for (int i = 0; i < 8; i++) {
for (int j = i; j < 8; j++) {
System.out.print('*');
}
System.out.println();
}
// 样式2:正直角三角形
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
运行结果:
********
*******
******
*****
****
***
**
*
*
**
***
****
*****
错误写法:
int age = 17;
if(age >= 18);{
System.out.println("可以上网吧");
}
正确写法:
int age = 17;
if(age >= 18){
System.out.println("可以上网吧");
}
原因分析:分号意味着一条语句结束,if(age >= 18); 这里已经将 if 执行完毕了,{} 里面的代码不被条件所控制了,即:if 判断失效了。
错误写法:
switch (month) {
case 7:
case 8:
case 9:
System.out.println("秋天");
case 10:
case 11:
case 12:
System.out.println("冬天");
break;
default:
System.out.println("输入的月份有误");
break;
}
正确写法:
switch (month) {
case 1:
case 2:
case 3:
System.out.println("春天");
break;
case 4:
case 5:
case 6:
System.out.println("夏天");
break;
case 7:
case 8:
case 9:
System.out.println("秋天");
break;
case 10:
case 11:
case 12:
System.out.println("冬天");
break;
default:
System.out.println("输入的月份有误");
break;
}
原因分析:如果忘记写 break,程序会发生穿透现象,会自动向下执行,直到遇到 break 语句或者 switch 语句结束为止。
错误写法:
int x = 0;
for (x = 1; x <= 3; x++); { // 这里多了个分号,大坑!
System.out.println("我只会执行一次!x = " + x);
}
正确写法:
int x = 0;
for (x = 1; x <= 3; x++) { // 没有分号!
System.out.println("循环正常执行!x = " + x);
}
原因分析:for() 后面直接写 ; 循环体是空的,所以大括号里的代码只会执行一次。
Q: for 循环和 while 循环的区别是什么? A: 功能上完全一样,for 适合已知循环次数的场景,while 适合未知循环次数的场景。
Q: switch 语句可以使用哪些数据类型? A: byte、short、int、char(JDK 5 开始支持枚举,JDK 7 开始支持 String)。
Q: do-while 循环的特点是什么? A: 先执行后判断,至少执行一次循环体。
Q: break 和 continue 的区别是什么? A: break 终止整个循环,continue 跳过本次循环继续下一次。
如果这篇文章对你有帮助,欢迎点赞 + 收藏,也欢迎转发给一起学习的小伙伴!
关注我,不错过后续的每一篇实战笔记!我们一起完成 AI 开发学习之旅~