Java中的程序控制结构(判断、循环、跳转语句)

前言

在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。

  1. 顺序控制
  2. 分支控制
  3. 循环控制

一、顺序控制

流程图如下:

在这里插入图片描述

二、分支控制

让程序有选择的的执行,分支控制有三种 :

  1. 单分支 if
  2. 双分支 if-else
  3. 多分支 if-else if -....-else...

1. 单分支

基本语法:

在这里插入图片描述

2. 双分支

流程图如下:

在这里插入图片描述

3. 多分支

基本语法:

在这里插入图片描述

思考:如果多个分支的条件表达式都成立,则是否会进入多个分支?答案是否,只会进入第一个满足条件表达式的分支,执行完该分支的代码块后,退出该结构体。

补充:多分支的流程图:

在这里插入图片描述

4. 嵌套分支

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支。建议: 不要超过 3 层 (可读性不好)

基本语法:
在这里插入图片描述

5. switch 分支结构

基本语法:

在这里插入图片描述

流程图如下:

在这里插入图片描述

注意:在switch 分支的case 子句中存在穿透现象。当case 子句中没有break 关键字时,程序不会退出,而是穿透到下一个case 子句,不进行条件判断,而是直接执行里面的代码块,直到遇到break 关键字或者进入default 子句后,才会结束程序。

可以使用穿透现象来快捷实现一些程序设计。

switch 注意事项和细节讨论:

在这里插入图片描述

所谓case 子句中的值必须是常量的意思是,其只能是固定的数值或者是字符,而不能是程序中定义的变量。

7. switch 语句和 if 语句的比较

如果判断的具体数值不多,而且符合byte、 short 、int、 char, enum[枚举], String这 6 种类型。虽然两个语句都可以使用,建议使用 swtich 语句。

其他情况:对区间判断,对结果为 boolean 类型的数据判断,使用 if语句,if 语句的使用范围更广。

三、循环控制

1. for 循环控制

基本语法:

在这里插入图片描述

说明:

  1. for 关键字,表示循环控制 ;
  2. for 有四要素: (1)循环变量初始化 (2)循环条件 (3)循环操作 (4)循环变量迭代 ;
  3. 循环操作 , 这里可以有多条语句,也就是我们要循环执行的代码;
  4. 如果 循环操作(语句) 只有一条语句,可以省略 {}, 建议不要省略。

流程图如下:

在这里插入图片描述

注意事项和细节说明:

  1. 循环条件必须是一个返回布尔值的表达式 ;
  2. for(初始化; 循环判断条件; 变量迭代) 中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略。for( ; ; ;) 代表了无限循环;
  3. 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。

如下图:

在这里插入图片描述

补充:编程思想
1. 化繁为简 : 即将复杂的需求,拆解成简单的需求,逐步完成 。编程 = 思想 ->练习-> 代码 ;
2. 先死后活 : 先考虑固定的值,然后转成可以灵活变化的值。

2. while 循环控制

基本语法:

在这里插入图片描述

流程图如下:

在这里插入图片描述
比较forwhile 循环:for 循环的循环变量初始化、循环条件、循环变量迭代这三要素是在()内的;而while 循环是分开来写。两者的四要素执行顺序是一样的,可以相互转化。

3. do…while 循环控制

基本语法:

在这里插入图片描述

说明:

  1. do while 是关键字 ;
  2. 也有循环四要素, 只是位置不一样 ;
  3. 先执行,再判断,也就是说,一定会至少执行一次 ;
  4. 最后结束处有一个分号 ( ; ) 。

流程图如下:

在这里插入图片描述

注意事项和细节说明:

  1. 循环条件是返回一个布尔值的表达式 ;
  2. do..while 循环是先执行,再判断, 因此它至少执行一次。

4. 多重循环控制(重难点!)

  1. 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while 均可以作为外层循环和内层循环。 【建议一般使用两层,最多不要超过 3 层, 否则,代码的可读性很差】
  2. 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
  3. 设外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m*n 次。

内存分析:

在这里插入图片描述

经典案例:打印金字塔

请编写一个程序,可以接收一个整数,表示层数(raw),打印出金字塔。如下图所示:

在这里插入图片描述

打印图一:

public class MulForExercise01 {
    public static void main(String[] args) {
        // 打印金字塔
        // 普通金字塔
        Scanner sc = new Scanner(System.in);
        int raw = sc.nextInt();// 接收用户输入金字塔层数
        for (int i = 1; i <= raw; i++) {
        	// 第 i 层有 i 个 *
            for (int k = 1; k <= i; k++) {
                System.out.print("*");
            }
            System.out.print("\n");// 打印完一层换行
        }
    }    
}        

打印图二:实心金字塔

public class MulForExercise02 {
    public static void main(String[] args) {
        // 打印金字塔
		// 实心金字塔
		int raw1 = sc.nextInt(); // 接收用户输入金字塔层数
        for (int i = 1; i <= raw1; i++) {
        	// 每一行的前 raw1-i 位都是空格
            for (int k = 1; k <= raw1-i; k++) {
                System.out.print(" ");
            }
            // 每一行打印的* 个数为 (2*i-1) 个
            for (int j = 1; j <= 2*i-1; j++) {
                System.out.print("*");
            }
            System.out.print("\n");// 打印完一层换行
        }
    }    
}  

打印图三:空心金字塔(方法一)

public class MulForExercise03 {
    public static void main(String[] args) {
        // 打印金字塔
        // 空心金字塔
        int raw3 = sc.nextInt();// 接收用户输入金字塔层数
        for (int i = 1; i <= raw3; i++) {
        	// 每一行的前 raw1-i 位都是空格,空格用来占位,不能省略!
            for (int k = 1; k <= raw1-i; k++) {
                System.out.print(" ");
            }
            // 参照实心金字塔,空心金字塔只需要第一位和最后一位上有 *
            // 其他位置都是空格
            // 最后一行都是 *
            for (int j = 1; j <= 2*i-1; j++) {
                if (j == 1 || j == 2*i-1 || i == raw3) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            System.out.print("\n");
        }
    }    
}  

打印图三:空心金字塔(方法二)

public class MulForExercise04 {
    public static void main(String[] args) {
        // 打印金字塔
        // 空心金字塔
        int raw2 = sc.nextInt();// 接收用户输入金字塔层数
        for (int i = 1; i <= raw2; i++) {
        	// 假设每一行都有 2*raw2-1 个位置,相当于以最后一层 * 个数打印了一个矩形
            for (int k = 1; k <= 2*raw2-1; k++) {
            	// 最后一层打印所有 *
                if (i == raw2) {
                    System.out.print("*");
                } else {
                	// 其余行在第raw2-i+1 和 raw2+i-1 位上打印 * 
                    if (k == raw2-i+1 || k == raw2+i-1) {
                        System.out.print("*");
                    } else {
                    	// 其余位上打印空格,不能省略这一步
                        System.out.print(" ");
                    }
                }
            }
            System.out.print("\n");
        }
    }    
}  

四、跳转控制语句

1. break 语句

break 语句用于终止某个语句块的执行,一般使用在 switch 或者循环[for , while , do-while]中。
基本语法:
在这里插入图片描述

流程图示意图如下:

在这里插入图片描述

注意事项和细节说明:

在这里插入图片描述

2. continue 语句

continue语句用于结束本次循环,继续执行下一次循环。

continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环 , 这个和前面break语句的标签的使用的规则一样。

基本语法:

在这里插入图片描述

流程示意图如下:

在这里插入图片描述

注意:在while循环中,continue 语句执行后默认跳转到循环条件,因此continue 语句必须放在变量迭代语句后面,否则变量不能迭代会出现死循环。

for 循环中,continue 语句执行后默认跳转到变量迭代,因此for 循环中不用考虑那么多。

举例如下:

public class Continue01 {
    public static void main(String[] args) {
        int i = 0;
        while (i < 10) {
            i++;// 必须在continue 前面进行变量的迭代;
            if (i == 4) {
                continue;// while循环中,直接跳转到条件判断语句进行判断!其后的语句不再执行
            }
            System.out.println("韩" + i);
            //i++; 不能在continue 后面,会造成死循环
        }

        // 在for循环中,continue 会跳转到变量迭代,与while中的continue不同
        for (int k = 0; k < 10; k++) {
            if (k == 4) {
                continue;
            }
            System.out.println("韩" + k);
        }
    }
}

上面的两部分代码输出的结果是不同的,在使用continue语句时需注意。

3. return 语句

return语句使用在某个方法的代码块中,表示跳出所在的方法,若当前方法为main 方法,则程序直接终止。

以下面例子自己练习,看看三者区别:

在这里插入图片描述

4. 比较 break、continue、return

continue 语句只是跳过循环体中的某一次循环,进行下一次循环;break 语句是直接跳出其所在循环体,继续执行方法中的其他语句;而return 语句是跳出其所在的方法。

小结

本文是小白博主在学习B站韩顺平老师的Java网课时整理的学习笔记,在这里感谢韩顺平老师的网课,如有有兴趣的小伙伴也可以去看看。

第一部分的学习总结就结束啦,明天开始第二部分,如果本文有什么错漏的地方,欢迎大家批评指正!一起加油!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林二月er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值