在 Java 编程的世界里,程序的执行流程控制是构建逻辑的核心基础。通过合理运用条件判断和循环结构,我们可以让程序根据不同的情况做出相应的反应,并重复执行特定的代码块,从而实现丰富多样的功能。
一、条件判断语句
条件判断语句用于根据不同的条件执行不同的代码逻辑,是程序实现分支逻辑的关键。
1. if-else 语句
if-else 语句是最基本的条件判断结构,它可以根据一个布尔表达式的真假来决定执行哪一部分代码
语法格式:
if (条件表达式) {
// 当条件为真时执行的代码
} else {
// 当条件为假时执行的代码
}
示例
假设我们要判断一个数是否为正数:
int num = 5;
if (num > 0) {
System.out.println("这个数是正数");
} else {
System.out.println("这个数不是正数");
}
多级嵌套
当需要处理多个条件时,可以使用 if-else 的嵌套结构。例如,判断一个数是正数、零还是负数:
int num = 0;
if (num > 0) {
System.out.println("正数");
} else if (num == 0) {
System.out.println("零");
} else {
System.out.println("负数");
}
2. switch 语句
switch 语句用于对多个固定值进行判断,它比多个 if-else 嵌套更简洁明了,尤其是在处理离散值的情况时。
语法格式
switch (表达式) {
case 常量表达式1:
// 执行代码1
break;
case 常量表达式2:
// 执行代码2
break;
...
default:
// 当表达式的值与所有case都不匹配时执行的代码
break;
}
注意事项
- 表达式 的值必须是整数或字符型。。case 后面的常量表达式必须是唯一的。
- break 语句用于跳出 switch 结构,避免出现穿透现象(即如果没有 break,会继续执行后面的 case 代码)。
示例
根据月份判断季节:
int month = 3;
switch (month) {
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
default:
System.out.println("无效的月份");
break;
}
二、循环结构
循环结构用于重复执行一段代码,直到满足特定的条件为止。常见的循环结构有 for 循环、while 循环和 do-while 循环。
1. for 循环
for 循环通常用于已知循环次数的情况,它的语法结构紧凑,便于控制循环变量。
语法格式
for (初始化表达式; 条件表达式; 更新表达式) {
// 循环体代码
}
执行流程
- 执行初始化表达式,初始化循环变量。
- 判断条件表达式是否为真,若为真则执行循环体。
- 执行完循环体后,执行更新表达式,修改循环变量。
- 再次判断条件表达式,重复步骤 2-4,直到条件表达式为假时退出循环。
示例
打印 1 到 10 的数字:
for (int i = 1; i <= 10; i++) {
System.out.print(i + " ");
}
2. while 循环
while 循环先判断条件表达式,再执行循环体,适用于循环次数不确定的情况。
语法格式
while (条件表达式) {
// 循环体代码
}
示例
计算 1 到 100 的和:
int sum = 0;
int i = 1;
while (i <= 100) {
sum += i;
i++;
}
System.out.println("1到100的和为:" + sum);
3. do-while 循环
do-while 循环与 while 循环类似,但它先执行循环体,再判断条件表达式,因此循环体至少会执行一次。
语法格式
do {
// 循环体代码
} while (条件表达式);
示例
让用户输入一个正整数,直到输入正确为止:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num;
do {
System.out.print("请输入一个正整数:");
num = scanner.nextInt();
} while (num <= 0);
System.out.println("你输入的正整数是:" + num);
scanner.close();
}
}
三、实战案例
案例一:猜数字游戏
需求描述
计算机生成一个 1 到 100 之间的随机数,玩家猜测这个数字。计算机根据玩家的猜测给出提示(“太大了” 或 “太小了”),直到玩家猜中为止,记录猜测次数并显示游戏结果。
实现思路
- 使用
Math.random()函数生成随机数。 - 使用
while循环让玩家不断猜测,直到猜中为止。 - 在循环中使用
if-else语句判断猜测的结果,并给出相应的提示。
代码实现
import java.util.Scanner;
public class GuessNumberGame {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = (int) (Math.random() * 100) + 1; // 生成1-100的随机数
int guess, attempts = 0;
System.out.println("欢迎来到猜数字游戏!");
System.out.println("请猜测一个1到100之间的数字:");
do {
guess = scanner.nextInt();
attempts++;
if (guess > number) {
System.out.println("太大了!请再猜一次:");
} else if (guess < number) {
System.out.println("太小了!请再猜一次:");
} else {
System.out.println("恭喜你,猜中了!你用了" + attempts + "次猜测。");
}
} while (guess != number);
scanner.close();
}
}
案例二:打印金字塔图案
需求描述
打印一个由星号(*)组成的金字塔图案,金字塔的层数由用户输入决定。
实现思路
- 使用两层嵌套循环,外层循环控制行数,内层循环控制每行的空格数和星号数。
- 对于第
i行(从 1 开始),前面的空格数为层数 - i,星号数为2 * i - 1。
代码实现
import java.util.Scanner;
public class PyramidPattern {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入金字塔的层数:");
int rows = scanner.nextInt();
for (int i = 1; i <= rows; i++) {
// 打印空格
for (int j = 1; j <= rows - i; j++) {
System.out.print(" ");
}
// 打印星号
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print("*");
}
System.out.println();
}
scanner.close();
}
}
四、总结
条件判断和循环结构是程序流程控制的核心要素,掌握它们的使用方法对于编写高效、逻辑清晰的代码至关重要。通过 if-else 和 switch 语句,我们可以实现不同条件下的分支逻辑;利用 for、while 和 do-while 循环,能够重复执行特定的代码块。