流程控制:让你的代码跳起华尔兹
各位看官,咱们今天聊点程序员的家常,说说代码里的“流程控制”。 听起来高大上,其实说白了,就是控制你的代码该干什么、什么时候干、以及怎么干的“指挥官”。 想象一下,你写了一大段代码,如果没有流程控制,它就像脱缰的野马,一股脑儿地从头跑到尾,完全不考虑实际情况。这肯定不行!我们需要让它像训练有素的舞者,根据不同的音乐节奏,跳出不同的舞步。
今天,我们就来好好学习一下这门“舞蹈编排”艺术,重点聚焦在if/else
,switch
和循环这三大“舞步”上。
if/else
:代码世界的“选择题”
if/else
语句可以说是流程控制里最基础、也是最常用的“选择题”。 它的语法很简单:
if (条件) {
// 如果条件为真,就执行这里的代码
} else {
// 如果条件为假,就执行这里的代码
}
我们可以把if
想象成一个“门卫”,只有符合条件的人才能进入“if的大门”,否则就只能去“else的房间”。
例子:判断奇偶数
这是一个经典的例子,判断一个数是奇数还是偶数:
int number = 7;
if (number % 2 == 0) {
System.out.println("这是一个偶数");
} else {
System.out.println("这是一个奇数");
}
在这个例子里,number % 2 == 0
就是我们的“条件”。 如果number
除以2的余数是0,就说明它是偶数,否则就是奇数。
嵌套的if/else
:更复杂的选择
有时候,我们需要进行更复杂的判断,就需要用到嵌套的if/else
语句。 就像俄罗斯套娃一样,一个if/else
里面可以再套一个if/else
。
例子:判断成绩等级
假设我们需要根据学生的成绩,来判断他们的等级:
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 70) {
System.out.println("中等");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
在这个例子里,我们用了多个else if
来判断不同的分数段。 这种嵌套的方式,可以让我们处理更加复杂的情况。
if/else
的使用技巧
- 简洁明了: 尽量让你的
if
条件简单易懂。 复杂的条件可以用括号或者提取成单独的函数来提高可读性。 - 避免过度嵌套: 过多的嵌套会使代码难以理解和维护。 如果嵌套层数太深,可以考虑使用
switch
语句或者重构代码。 - 考虑默认情况: 在
if/else
语句中,一定要考虑所有可能的情况。 如果没有明确的处理,应该提供一个默认的else
分支来处理未知情况。 - 善用三元运算符: 对于简单的
if/else
判断,可以使用三元运算符condition ? value1 : value2
来简化代码。 例如:
int age = 20;
String message = age >= 18 ? "已成年" : "未成年";
System.out.println(message);
switch
:代码世界的“多选题”
switch
语句是另一种常用的流程控制语句, 它可以根据不同的值,来执行不同的代码块。 它的语法如下:
switch (表达式) {
case 值1:
// 如果表达式的值等于值1,就执行这里的代码
break;
case 值2:
// 如果表达式的值等于值2,就执行这里的代码
break;
// ... 更多 case
default:
// 如果表达式的值不等于任何一个 case 的值,就执行这里的代码
}
switch
语句就像一个“多选题”,表达式的值就是题干,每个case
就是选项,default
就是“以上皆不选”。
例子:判断星期几
假设我们需要根据数字来判断星期几:
int day = 3;
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("输入错误");
}
在这个例子里,day
就是我们的“表达式”,每个case
对应一个星期几。 注意,每个case
后面都要加上break
语句,否则程序会继续执行下一个case
的代码,这通常不是我们想要的结果。
switch
的使用技巧
break
的重要性: 永远不要忘记在每个case
后面加上break
语句,除非你真的想要“穿透”到下一个case
。default
的必要性: 最好在switch
语句中提供一个default
分支,用来处理未知或者错误的情况。- 类型限制: 在Java中,
switch
语句的表达式只能是byte
、short
、int
、char
、enum
或者String
类型。 - Java 12+ 的增强: Java 12 引入了增强的
switch
语句,可以简化代码,例如:
int day = 3;
String dayName = switch (day) {
case 1 -> "星期一";
case 2 -> "星期二";
case 3 -> "星期三";
case 4 -> "星期四";
case 5 -> "星期五";
case 6 -> "星期六";
case 7 -> "星期日";
default -> "输入错误";
};
System.out.println(dayName);
这种写法更加简洁,也避免了忘记break
语句的风险。
循环:让代码重复“跳舞”
循环语句可以让我们的代码重复执行某段代码, 就像跳舞一样,一遍又一遍地重复同样的动作。 常用的循环语句有for
,while
和do-while
。
for
循环:有规律的“舞蹈”
for
循环通常用于已知循环次数的情况。 它的语法如下:
for (初始化; 条件; 更新) {
// 循环体
}
- 初始化: 在循环开始前执行一次,通常用于初始化循环变量。
- 条件: 每次循环前都会判断条件是否为真,如果为假,循环结束。
- 更新: 每次循环结束后执行,通常用于更新循环变量。
例子:打印数字1到10
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
在这个例子里,我们用i
作为循环变量,从1开始,每次循环增加1,直到i
大于10为止。
while
循环:只要你想跳,就能一直跳
while
循环通常用于不知道循环次数,只需要满足某个条件就一直循环的情况。 它的语法如下:
while (条件) {
// 循环体
}
例子:猜数字游戏
import java.util.Random;
import java.util.Scanner;
public class GuessNumber {
public static void main(String[] args) {
Random random = new Random();
int randomNumber = random.nextInt(100) + 1; // 生成1-100的随机数
Scanner scanner = new Scanner(System.in);
int guess = 0;
int attempts = 0;
while (guess != randomNumber) {
System.out.print("请猜一个1-100之间的数字:");
guess = scanner.nextInt();
attempts++;
if (guess < randomNumber) {
System.out.println("猜小了!");
} else if (guess > randomNumber) {
System.out.println("猜大了!");
} else {
System.out.println("恭喜你猜对了!你猜了" + attempts + "次。");
}
}
scanner.close();
}
}
在这个例子里,只要guess
不等于randomNumber
,循环就会一直执行。
do-while
循环:至少跳一次的“舞蹈”
do-while
循环和while
循环类似,唯一的区别是,do-while
循环会先执行一次循环体,然后再判断条件。 它的语法如下:
do {
// 循环体
} while (条件);
例子:输入验证
import java.util.Scanner;
public class InputValidation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number;
do {
System.out.print("请输入一个大于0的数字:");
number = scanner.nextInt();
} while (number <= 0);
System.out.println("你输入的数字是:" + number);
scanner.close();
}
}
在这个例子里,我们用do-while
循环来确保用户输入的数字大于0。 即使第一次输入的数字小于等于0,循环体也会至少执行一次。
循环的使用技巧
- 避免死循环: 确保你的循环条件最终会变为假,否则程序会陷入死循环。
- 优化循环体: 尽量减少循环体内的计算量,避免重复计算。
- 使用
break
和continue
:break
语句可以提前结束循环,continue
语句可以跳过本次循环,直接进入下一次循环。 - 嵌套循环: 循环也可以嵌套,就像跳双人舞一样。 但是要注意,过多的嵌套会降低代码的效率。
总结:让你的代码跳起优美的华尔兹
流程控制语句是编程的基础,掌握好它们,可以让你编写出更加灵活、高效的代码。 记住,if/else
是选择题,switch
是多选题,循环是重复跳舞。 灵活运用它们,让你的代码跳起优美的华尔兹吧!
希望这篇文章能给你带来一些启发,让你在编程的道路上更进一步。 祝你编码愉快!