Java SE 学习笔记(二)—— 流程控制语句

💚 流程控制语句:通过一些语句,来控制程序的执行流程。

  • 顺序结构
  • 分支结构
  • 循环结构

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 语句中,表达式的数据类型,可以是byteshortintchar,JDK5之后可以是enum(枚举),JDK7后可以是String(字符串),不支持doublefloatlong
  • 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… 循环

❗️ 注意:forwhile 的小区别

  • 控制条件语句所控制的那个变量,它归属于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中使用
  • breakcontinue只能跳出自己所在的那一层关系,如果要想跳出指定的某一层,可以加入循环的标号
标号名:while(true){
	switch(表达式){
		case 1:
		break 标号名;
	}
}

下一篇:Java SE 学习笔记(三)—— 数组

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值