流程控制

一、流程控制说明

1.1.流程控制的作用

流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。

1.2.控制语句的分类

控制语句分为三类:顺序、选择和循环。

  • “顺序结构”代表“先执行a,再执行b”的逻辑。
  • “条件判断结构”代表“如果…,那么…”的逻辑。
  • “循环结构”代表“如果…,则再继续…”的逻辑。

这三种基本逻辑结构是相互支撑的,它们共同构成了算法的基本结构,无论怎样复杂的逻辑结构,都可以通过它们来表达。所以任何一种高级语言都具备上述两种结构。

1.3.流程控制的流程

三种流程图说明如下:

二、分支结构

2.1.if分支结构

2.1.1.单分支

语法结构:

if(布尔表达式){
    语句块
}

if语句对布尔表达式进行一次判定,若判定为真,则执行{}中的语句块,否则跳过该语句块。流程图如图所示:

案例代码如下:

package com.branch;

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        //创建一个scanner扫描器
        Scanner scanner = new Scanner(System.in);

        //给出提示信息
        System.out.print("请输入年龄:");

        //获取键盘输入的内容
        int age = scanner.nextInt();

        /*
        if-单分支:
        (1)结构:
        if(条件表达式,这个表达式的结果是一个布尔值,只能是true或者false)
            如果()中表达式返回结果是true,那么执行{}中的代码
            如果上面的()中的表达式返回结果是false,那么不执行{}中代码
            {}中的代码是否执行,取决于()中表达式的返回结果
         (2)下面的代码中,两个单分支拼凑出两个个选择,每个选择是独立的,依次判断执行的
         */
        if(age>=18){
            System.out.println("恭喜你,年龄符合上网要求");
        }


        if(age<18){
            System.out.println("未成年人无法上网");
        }
    }
}

2.1.2.双分支

语法结构如下:

if(布尔表达式){
语句块1
}else{
      语句块2
}

当布尔表达式为true时,执行语句块1,否则,执行语句块2。也就是else部分。流程图如图所示:

案例代码如下:

package com.branch;

import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        //创建scanner对象
        Scanner scanner = new Scanner(System.in);

        //给出提示
        System.out.print("请输入年龄:");

        //接受输入的内容
        int age = scanner.nextInt();

        if(age>=18){
            System.out.println("已成年,可以上网了");
        }else {
            System.out.println("未成年人不可以上网");
        }

    }
}

2.1.3.多分支

语法结构:

if(布尔表达式1) {
        语句块1;
} else if(布尔表达式2) {
        语句块2;
}……
else if(布尔表达式n){
        语句块n;
} else {
        语句块n+1;
}

当布尔表达式1为true时,执行语句块1;否则,判断布尔表达式2,当布尔表达式2为true时,执行语句块2;否则,继续判断布尔表达式3······;如果1~n个布尔表达式均判定为假时,则执行语句块n+1,也就是else部分。流程图如图所示:

案例如下:

package com.branch;

import java.util.Scanner;

public class Demo03 {
    public static void main(String[] args) {
        //创建scanner对象
        Scanner scanner = new Scanner(System.in);

        //给出提示
        System.out.print("请输入年龄:");

        //接受输入的内容
        int age = scanner.nextInt();

        if(age>=60) {
            System.out.println("步入了老年时代");
        } else if(age>=45) {
            System.out.println("年龄大于30岁了,没时间上网");
        } else if(age>=30){
            System.out.println("年龄大于30岁了,没时间上网");
        } else {
            System.out.println("未成年人不可以上网");
        }
        
    }
}

2.1.4.嵌套分支

嵌套分支指的是在分支里面包含分支结构,一句话,在判断中还有判断,案例说明如下:

小朋友搬桌子:
年龄大于8岁,可以搬桌子;
如果年龄大于5岁,性别是男,可以搬桌子;
否则不可以搬动桌子,提示:年龄太小了,无法搬动

案例代码如下:

package com.branch;

import java.util.Scanner;

public class Demo04 {
    public static void main(String[] args) {
        //创建scanner对象
        Scanner scanner = new Scanner(System.in);

        //给出提示
        System.out.print("请输入年龄:");

        //接受输入的内容
        int age = scanner.nextInt();

        if(age>=8){
            System.out.println("可以搬动桌子");
        }else if(age>=5){
            //输入性别
            System.out.print("请输入性别:");
            String sex = scanner.next();

            //判断两个值应用的内存地址是否相等
            if (sex.equals("男")){
                System.out.println("性别为男孩,可以搬动桌子");
            }else {
                System.out.println("性别为女孩,无法搬动桌子");
            }
        }else {
            System.out.println("年龄太小了,无法搬动");
        }
    }
}

2.2.switch分支结构

switch多分支结构(多值情况),语法结构:

switch (表达式) {
    case 值1:
         语句序列1;
         [break];
    case 值2:
         语句序列2;
         [break];
        … … …      … …
    [default:默认语句;]
}

注意:switch语句会根据表达式的值从相匹配的case标签处开始执行,一直执行到break语句处或者是switch语句的末尾。如果表达式的值与任意case值不匹配,则进入default语句(如果存在default语句的情况)。根据表达式值的不同可以执行许多不同的操作。switch语句中case标签在JDK1.5之前必须是整数(long类型除外)或者枚举,不能是字符串,在JDK1.7之后允许使用字符串(String)。大家要注意,当布尔表达式是等值判断的情况,可以使用if-else if-else多分支结构或者switch结构,如果布尔表达式区间判断的情况,则只能使用if-else if-else多分支结构。switch多分支结构的流程图如图所示:

案例说明:

 实现一个功能根据给出的学生分数,判断学生的成绩等级:
                >=90  -----A
                >=80  -----B
                >=70  -----C
                >=60  -----D
                <60   -----E

代码如下:

package com.branch;

import java.util.Scanner;

public class Demo05 {
    public static void main(String[] args) {
        //创建scanner对象
        Scanner scanner = new Scanner(System.in);

        //给出提示
        System.out.print("请输入年龄:");

        //接受输入的内容
        int score = scanner.nextInt();
        
        /*
        【1】语法结构:
                switch(){
                        case * :
                        case * :
                        .......
                }
        【2】switch后面是一个(),()中表达式返回的结果是一个等值,这个等值的类型可以为:
        int,byte,short,char,String,枚举类型
        【3】()中的等值会依次跟case后面的值进行比较,如果匹配成功,就执行:后面的代码
        【4】为了防止代码的“穿透”效果:在每个分支后面加上一个关键词break,遇到break这个分支就结束了
        【5】类似else的“兜底”“备胎”的分支:default分支
        【6】default分支可以写在任意的位置上,但是如果没有在最后一行,后面必须加上break关键字,
        如果在最后一行的话,break可以省略
        【7】相邻分支逻辑是一样的,那么就可以只保留最后一个分支,上面的都可以省去不写了
        【8】switch分支和if分支区别:
        表达式是等值判断的话--》if ,switch都可以
        如果表达式是区间判断的情况---》if最好
        【9】switch应用场合:就是等值判断,等值的情况比较少的情况下
         */

        //根据学生成绩判断等级
        switch (score){
            case 90:
                System.out.println("A");
                break;
            case 80:
                System.out.println("B");
                break;
            case 70:
                System.out.println("C");
                break;
            case 60:
                System.out.println("D");
                break;
            default:
                System.out.println("成绩登录为F,不及格");
                break;
        }

    }
}

三、循环结构

3.1.while循环

while是最基本的循环,它的结构为:

while( 布尔表达式 ) {
  //循环内容
}

只要布尔表达式为 true,循环就会一直执行下去。案例代码如下:

package com.cycle;

public class Demo01 {
    public static void main(String[] args) {
        int x = 10;
        while (x<20){
            System.out.println("x的值为:"+x);
            x++;
        }
    }
}

3.2.do-while循环

对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。语法结构如下:

do {
       //代码语句
}while(布尔表达式);

注意:布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。

package com.cycle;

/**
 * @author : Augus
 * @date: 2023/5/15 14:54
 * @Description: com.cycle
 * @version: 1.0
 */
public class Demo02 {
    public static void main(String[] args) {
        int x = 10;
        do{
            System.out.println("x的值为:"+x);
            x++;
        }while (x<20);
        
        /*
        while循环和do-while的区别:
            while:先判断,再执行
            do-while:先执行,再判断--->至少被执行一次,从第二次开始才进行判断
        什么场合使用do-while:
            while(考试是否通过){
                考试;
            }
            --->不合适
            do{
                考试;
            }while(考试是否通过);
            --->合适   
         */
    }
}

3.3.for循环

虽然所有循环结构都可以用 while 或者 do...while表示,但 Java 提供了for 循环,使一些循环结构变得更加简单。for循环执行的次数是在执行前就确定的。语法格式如下:

for (初始表达式; 布尔表达式; 迭代因子) {
          循环体;
}

注意:for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。for循环在第一次反复之前要进行初始化,即执行初始表达式;随后,对布尔表达式进行判定,若判定结果为true,则执行循环体,否则,终止循环;最后在每一次反复的时候,进行某种形式的“步进”,即执行迭代因子。

  • 初始化部分设置循环变量的初值
  • 条件判断部分为任意布尔表达式
  • 迭代因子控制循环变量的增减

for循环在执行条件判定后,先执行的循环体部分,再执行迭代因子。for循环结构的流程图如图所示:

package com.cycle;

/**
 * @author : Augus
 * @date: 2023/5/15 15:08
 * @Description: com.cycle
 * @version: 1.0
 */
public class Demo03 {
    public static void main(String[] args) {
        for (int x = 0; x < 20; x++) {
            System.out.println("x的值为:"+x);
        }

    }
}

3.4.增强for循环

Java5 引入了一种主要用于数组的增强型 for 循环。Java 增强 for 循环语法格式如下:、

for(声明语句 : 表达式)
{
   //代码句子
}

声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

package com.cycle;

public class Demo03 {
    public static void main(String[] args) {
        int[] numbers = {100, 200, 300, 400, 500};

        for (int number : numbers) {
            System.out.println("本次取值为:"+number);
        }

        System.out.println("----------------------------");

        String[] names = {"丹佛掘金","洛杉矶湖人","迈阿密热火","波士顿凯尔特人"};

        for (String name : names) {
            System.out.println("本次球队的名字:"+name);
        }

    }
}

3.5.终止循环

3.5.1.break 关键字

break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。break 跳出最里层的循环,并且继续执行该循环下面的语句。

语法:break 的用法很简单,就是循环结构中的一条语句:

break;

代码如下:

package com.cycle;

public class Demo03 {
    public static void main(String[] args) {
        int[] numbers = {100, 200, 300, 400, 500};

        for (int number : numbers) {
            //number等于200时跳出循环
            if(number==200){
                break;
            }
            System.out.println("本次取值为:"+number);
        }

        System.out.println("----------------------------");

        String[] names = {"丹佛掘金","洛杉矶湖人","迈阿密热火","波士顿凯尔特人"};

        for (String name : names) {
            if(name.equals("洛杉矶湖人")){
                System.out.println("湖人总冠军");
                break;
            }
            System.out.println("本次球队的名字:"+name);
        }

    }
}

案例二:

package com.cycle;

public class Demo04 {
    public static void main(String[] args) {
        //求100以内的整数和

        int s = 0;

        for (int i = 0; i <= 100; i++) {
            s+=i;
            while (i==50){
                System.out.println("本次累加的值为:"+i+"即将结束");
                break;//这里终止的只是while循环,for循环则会继续执行
            }
        }
        System.out.println(s);
    }
}

3.5.2.continue 关键字

continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。continue的作用:结束本次循环,继续下一次循环

语法:

continue 就是循环体中一条简单的语句:

continue;

代码如下:

package com.cycle;

public class Demo05 {
    public static void main(String[] args) {
        //功能:输出100以内的偶数和
        int s = 0;

        for (int i = 0; i <= 100 ; i++) {
            if(i%2!=0){
                continue;
            }else {
                s+=i;
            }
            System.out.println("本次操作的是:"+i);
        }

        System.out.println("100以内偶数的和为:"+s);
    }
}

4.6.嵌套循环

嵌套循环既可以是 for循环嵌套 while 循环,也可以是 while 循环嵌套 do-while 循环 …… 即各种类型的循环都可以作为外层循环,也可以作为内层循环。
当程序遇到嵌套循环时,如果外层循环的循环条件允许,则开始执行外层循环的循环体,而内层循环将被外层循环的循环体来执行——只是内层循环需要反复执行自己的循环体而已。
当内层循环执行结束,且外层循环的循环体执行结束时,则再次计算外层循环的循环条件,决定是否再次开始执行外层循环的循环体。
根据上面分析,假设外层循环的循环次数为 n 次,内层循环的循环次数为 m 次,那么内层循环的循环体实际上需要执行 n×m 次。嵌套循环的执行流程如图

嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内层循环,才可以结束外层循环的当次循环,开始下一次循环。下面是一个使用嵌套循环输出九九乘法表实例。

package com.cycle;

public class Demo06 {
    public static void main(String[] args) {
        System.out.println("九九乘法表");
        //外层循环
        for (int i = 1; i <= 9; i++) {
            //内层循环
            for (int j = 1; j <= i ; j++) {
                System.out.print(j+"*"+i+"="+j*i+" ");
            }
            System.out.println(" ");
        }
    }
}
posted @ 2023-05-11 18:04  酒剑仙*  阅读(78)  评论(0)    收藏  举报