目录
💚 流程控制语句:通过一些语句,来控制程序的执行流程。
- 顺序结构
- 分支结构
- 循环结构
1 顺序结构
顺序结构是 Java 语句默认的执行流程,按照代码的先后顺序依次执行,从上到下,从左到右。
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
2 分支结构
2.1 if…语句
🎈 格式:
if(条件表达式){
语句体;
}
❗️ 注意:
- 若 if 语句所控制的语句体是一条语句,大括号可以省略不写,但是不建议这么写,比如
int a =10;
对于编译器来说是两条语句,定义变量语句和赋值语句,该语句若为 if 语句所控制的语句体,不加大括号会报错。- if 语句的小括号后面不要加分号,虽然不会报错,但是这样不管if 语句是否成立,大括号的内容都会执行。
2.2 if…else…语句
🎈 格式:
if (关系表达式) {
语句体1;
} else {
语句体2;
}
2.3 if…else if…else…语句
🎈 格式:
if (判断条件1){
执行语句1;
} else if (判断条件2){
执行语句2;
}
...
else if (判断条件n) {
执行语句n;
} else {
执行语句n+1;
}
2.4 switch语句
🎈 格式:
switch (表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
default:
语句体n + 1;
break;
🌟 执行流程:
- 首先计算出表达式的值
- 其次,和
case
依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break
就会结束 - 最后,如果所有的
case
都和表达式的值不匹配,就会执行default
语句体部分,然后程序结束掉
🙋举个栗子:
public class Test {
public static void main(String[] args) {
//定义变量,判断是星期几
int weekday = 6;
//switch语句实现选择
switch (weekday) {
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;
}
}
}
❗️ 注意:
switch
语句中,表达式的数据类型,可以是byte
,short
,int
,char
,JDK5之后可以是enum
(枚举),JDK7后可以是String
(字符串),不支持double
、float
、long
。case
后面的值只能是常量,不能是变量case
后面的值不能重复- 不要忘记写
break
,否则会出现穿透现象
在 switch
语句中,如果 case
的后面不写 break
,将出现 穿透现象,也就是不会在判断下一个 case
的值,直接向后运行,直到遇到 break
,或者整体的 switch
语句结束。
😇 穿透可以优化代码
import java.util.Scanner
public class Test {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期数:");
int week = sc.nextInt();
switch(week){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("休息日");
break;
default:
System.out.println("您的输入有误");
break;
}
}
}
if
语句适合 区间 匹配switch
语句适合 值 匹配
3 循环结构
3.1 for 循环
🎈 格式:
for(初始化表达式①; 布尔表达式②; 步进表达式④){
循环体③
}
❗️注意:
for
循环中三个语句都可以任意省略,但是分号;
不能省略
🙋举个栗子:使用循环,计算1-100之间的偶数和
public static void main(String[] args) {
//1.定义一个初始化变量,记录累加求和,初始值为0
int sum = 0;
//2.利用for循环获取1‐100之间的数字
for (int i = 1; i <= 100; i++) {
//3.判断获取的数组是奇数还是偶数
if (i % 2 == 0) {
//4.如果是偶数就累加求和
sum += i;
}
}
//5.循环结束之后,打印累加结果
System.out.println("sum:" + sum);
}
🙋🙋 再举个栗子:在控制台输出所有的“水仙花数”,要求每行打印2个
水仙花数是一个三位数,该数的个位、十位、百位的数字立方和等于原数
/*
System.out.print (打印内容); 打印后不换行
System.out.println(打印内容); 打印后换行
分析:
1. 定义变量count,用于保存“打印过”的数量,初始值为0
2. 在判定和打印水仙花数的过程中,拼接空格, 但不换行,并在打印后让count变量+1,记录打印过的数量
3. 在每一次count变量+1后,判断是否到达了2的倍数,是的话,换行。
*/
public static void main(String[] args){
// 1. 定义变量count,用于保存“打印过”的数量,初始值为0
int count = 0;
for(int i = 100; i <= 999; i++){
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 10 / 10 % 10;
// 不像Python,Java中是没有立方的运算符的
if( (ge*ge*ge + shi*shi*shi + bai*bai*bai) == i){
// 2. 在判定和打印水仙花数的过程中,拼接空格, 但不换行,并在打印后让count变量+1,记录打印过的数量
System.out.print(i + " ");
count++;
// 3. 在每一次count变量+1后,判断是否到达了2的倍数,是的话,换行
if(count % 2 == 0){
System.out.println();
}
}
}
}
3.2 while 循环
🎈 格式:
初始化表达式①
while(布尔表达式②){
循环体③
步进表达式④
}
🙋举个栗子:循环输出10次HelloWorld
public static void main(String[] args) {
//while循环实现打印10次HelloWorld
// 定义初始化变量
int i = 1;
//循环条件<=10
while (i <= 10) {
System.out.println("HelloWorld");
//步进
i++;
}
}
3.3 do…while…循环
🎈 格式:
初始化表达式①
do{
循环体③
步进表达式④
}while(布尔表达式②);
do...while…
循环的特点:无论循环条件是否满足,都会 无条件执行一次循环体 ,即使我们将循环条件直接写成false,也依然会循环一次。这样的循环具有一定的风险性,因此初学者不建议使用 do...while…
循环。
❗️ 注意:
for
和while
的小区别
- 控制条件语句所控制的那个变量,它归属于for循环的语法结构,在for循环结束后,就不能再被访问到了,而其不属于while循环的语法结构,循环结束后还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是 for循环结束,该变量就从内存中消失,能够提高内存的使用效率
- 在 已知循环次数 的时候使用推荐使用
for
,循环次数未知 的时候推荐使用while
,do…while循环则很少使用
3.4 死循环
🎈 格式:
public static void main(String[] args) {
// for死循环格式
for(;;){
}
// while死循环格式
while(true){
}
// do...while死循环格式
do{
}while(true);
System.out.println("看看我能被执行吗?~"); // 无法访问的语句
}
❗️注意:
- 在终端界面
CTRL
+C
可以结束死循环- 死循环下面的语句无法执行(例外就是死循环里有break,有跳出循环的可能,此时可以执行死循环后面的语句)
🏃🏃🏃 跳出语句
break
直接跳出 整个 循环continue
跳出 本次 循环,进入下一次循环
🙋举个栗子:输入正确的密码
public static void main(String[] args) {
int truePassword=520;
Scanner sc =new Scanner(System.in);
while(true){
System.out.println("请输入正确的密码:");
int password = sc.nextInt();
if (password==truePassword){
System.out.println("登陆成功了~");
break;
}else{
System.out.println("密码错误");
}
❗️注意:
continue
只能在循环中进行使用break
只能在循环和switch
中使用break
和continue
只能跳出自己所在的那一层关系,如果要想跳出指定的某一层,可以加入循环的标号
标号名:while(true){
switch(表达式){
case 1:
break 标号名;
}
}