Java-基础(3)-程序逻辑控制-构建清晰、高效的代码流程
前言
逻辑控制是编程语言中最基础也是最重要的概念之一,它决定了程序如何执行和响应不同的条件。Java作为一门面向对象的编程语言,提供了完善的逻辑控制结构,让开发者能够编写出清晰、健壮的程序。本文将深入探讨Java中的各种逻辑控制结构,帮助您掌握编写高质量Java代码的关键技能。
目录
1. 条件语句
1.1 if语句
if语句是最基本的条件判断结构,只有当指定条件为true时,才会执行代码块。
int score = 85;
if (score >= 60) {
System.out.println("及格了!");
}
1.2 if-else语句
提供两个分支:条件为true时执行一个代码块,为false时执行另一个代码块。
int number = 10;
if (number % 2 == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}
1.3 if-else-if阶梯
处理多个条件判断,按顺序检查条件,执行第一个为true的条件对应的代码块。
int score = 85;
char grade;
if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else if (score >= 60) {
grade = 'D';
} else {
grade = 'F';
}
System.out.println("成绩等级: " + grade);
1.4 switch语句
适用于多个固定值的条件判断,比多个if-else语句更清晰。
int dayOfWeek = 3;
String dayName;
switch (dayOfWeek) {
case 1:
dayName = "星期一";
break;
case 2:
dayName = "星期二";
break;
case 3:
dayName = "星期三";
break;
case 4:
dayName = "星期四";
break;
case 5:
dayName = "星期五";
break;
case 6:
dayName = "星期六";
break;
case 7:
dayName = "星期日";
break;
default:
dayName = "无效的天数";
}
System.out.println(dayName);
2. 循环结构
2.1 for循环
适用于已知循环次数的场景。
// 传统for循环
for (int i = 0; i < 5; i++) {
System.out.println("循环次数: " + i);
}
// 增强for循环(foreach)
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println("数字: " + num);
}
2.2 while循环
当不确定循环次数,但知道循环条件时使用。
int count = 1;
while (count <= 5) {
System.out.println("计数: " + count);
count++;
}
2.3 do-while循环
至少执行一次循环体,然后再检查条件。
int number;
do {
System.out.println("至少会执行一次");
number = (int)(Math.random() * 10);
System.out.println("生成的数字: " + number);
} while (number != 5);
3. 跳转语句
3.1 break语句
用于退出循环或switch语句。
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 当i等于5时退出循环
}
System.out.println(i);
}
3.2 continue语句
跳过当前循环的剩余代码,直接开始下一次循环。
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 跳过偶数
}
System.out.println("奇数: " + i);
}
3.3 return语句
从方法中返回结果并退出方法。
public static boolean isEven(int number) {
return number % 2 == 0;
}
4. 嵌套控制结构
控制结构可以相互嵌套,实现复杂的逻辑。
// 嵌套循环示例:打印乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "×" + i + "=" + (i * j) + "\t");
}
System.out.println();
}
// 嵌套条件语句示例
int score = 85;
boolean isPassed = true;
if (score >= 60) {
if (score >= 90) {
System.out.println("优秀!");
} else if (score >= 80) {
System.out.println("良好!");
} else {
System.out.println("及格!");
}
} else {
isPassed = false;
System.out.println("不及格!");
}
5. 最佳实践和常见陷阱
5.1 最佳实践
1. 保持条件简单:复杂的条件应该分解为多个简单条件或使用方法封装
2. 使用大括号:即使只有一行代码,也使用大括号避免潜在错误
3. 避免深度嵌套:过深的嵌套会使代码难以阅读和维护
4. 优先使用foreach循环:当只需要遍历集合元素时
5.2 常见陷阱
5.2.1 switch语句中忘记break
// 错误示例
switch (day) {
case 1:
System.out.println("周一");
// 忘记break,会继续执行下一个case
case 2:
System.out.println("周二");
break;
}
5.2.2 在循环中修改循环变量
// 可能导致意外行为
for (int i = 0; i < 10; i++) {
if (condition) {
i++; // 在循环体内修改循环变量
}
}
5.2.3 浮点数相等比较
// 错误的方式
double a = 0.1 + 0.2;
if (a == 0.3) { // 可能为false
// ...
}
// 正确的方式
if (Math.abs(a - 0.3) < 0.00001) {
// ...
}
6. 实际应用示例
示例1:用户身份验证
import java.util.Scanner;
public class Authentication {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
final String CORRECT_USERNAME = "admin";
final String CORRECT_PASSWORD = "password123";
int attempts = 0;
boolean isAuthenticated = false;
while (attempts < 3 && !isAuthenticated) {
System.out.print("请输入用户名: ");
String username = scanner.nextLine();
System.out.print("请输入密码: ");
String password = scanner.nextLine();
if (username.equals(CORRECT_USERNAME) && password.equals(CORRECT_PASSWORD)) {
isAuthenticated = true;
System.out.println("登录成功!");
} else {
attempts++;
System.out.println("用户名或密码错误,还剩 " + (3 - attempts) + " 次尝试");
}
}
if (!isAuthenticated) {
System.out.println("尝试次数过多,账户已锁定");
}
scanner.close();
}
}
示例2:数字猜谜游戏
import java.util.Random;
import java.util.Scanner;
public class GuessNumber {
public static void main(String[] args) {
Random random = new Random();
Scanner scanner = new Scanner(System.in);
int targetNumber = random.nextInt(100) + 1;
int guess;
int attempts = 0;
boolean hasWon = false;
System.out.println("欢迎来到猜数字游戏!(1-100)");
do {
System.out.print("请输入你的猜测: ");
guess = scanner.nextInt();
attempts++;
if (guess < targetNumber) {
System.out.println("猜小了!");
} else if (guess > targetNumber) {
System.out.println("猜大了!");
} else {
hasWon = true;
System.out.println("恭喜!你用了 " + attempts + " 次猜对了!");
}
if (attempts >= 10 && !hasWon) {
System.out.println("游戏结束!正确答案是: " + targetNumber);
break;
}
} while (!hasWon);
scanner.close();
}
}
示例3:素数判断器
public class PrimeChecker {
public static void main(String[] args) {
int number = 29;
boolean isPrime = true;
if (number <= 1) {
isPrime = false;
} else {
// 优化:只需检查到sqrt(number)
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
isPrime = false;
break;
}
}
}
if (isPrime) {
System.out.println(number + " 是素数");
} else {
System.out.println(number + " 不是素数");
}
}
}
总结
Java的逻辑控制结构为开发者提供了强大的工具来构建复杂的程序逻辑。通过合理运用条件语句、循环结构和跳转语句,可以编写出清晰、高效且易于维护的代码。记住以下关键点:
1. 根据场景选择合适的控制结构
2. 遵循最佳实践,避免常见陷阱
3. 保持代码简洁和可读性
4. 适时使用嵌套结构,但避免过度嵌套
5. 利用Java的新特性(如增强的switch表达式)提高代码质量
掌握这些逻辑控制结构是成为Java开发高手的重要一步,希望本文能帮助您在编程道路上更进一步!
Happy Coding! 🚀
更多推荐
所有评论(0)