《Java基础入门 极速版》

ch03 Java流程控制


3.1 顺序执行

所谓的流程控制,其实就是计算机在执行代码时,对指令代码执行顺序的控制。Java种的流程控制主要分为3种:1. 顺序执行;2.分支执行;3.循环执行。

图1 顺序执行
package cn.du.ch03;

public class Java01_FlowControl {
    public static void main(String[] args) {

        // TODO  1. 顺序执行 :代码出现的先后顺序以及语法的先后顺序
        // 变量在使用之前,必须声明并进行了初始化

        // System.out.println( i + j );  // 还未声明 爆红

        System.out.println("顺序执行【杜老师编制】");
        int i = 10;
        int j = 10;
        System.out.println( i+"+"+j+"="+ (i + j));

        //int i2;
        //int j2;
        //System.out.println( i2 + j2 );  // 没有初始化i2,j2 爆红
    }
}
图2 顺序执行举例

3.2 分支执行

图3 单分支和双分支
图4 多分支之一
package cn.du.ch03;

public class Java02_FlowControl {
    public static void main(String[] args) {

        // TODO 流程控制 - 分支执行
        System.out.println("单分支执行【杜老师改编】");
        // 分支结构
        // 1. TODO 可选分支:单分支结构
        System.out.println("第一步");
        System.out.println("第二步");
        // 判断:条件表达式的结果是否为true,如果为true,那么执行分支逻辑,如果为false,继续执行
        // 判断的语法使用if关键字,表示如果,在条件表达式前使用,如果结果为true,那么分支逻辑应该在后续的大括号种执行
        int 年龄 = 20;
        if (年龄 >= 18) {
            System.out.println("18岁以上--青年(单分支)");
        }
        System.out.println("第三步\n");

        // 2. TODO 必选分支:双分支结构(二选一)
        // 语法上使用if ... else操作,这里的else就表示其他场合
        System.out.println("双分支执行【杜老师改编】");
        System.out.println("第一步");
        System.out.println("第二步");
        String 性别 = "男";
        if ( 性别.equals("男")) {
            System.out.println("帅哥");
        } else {
           System.out.println("靓女");
        }
        System.out.println("第三步\n");

        // 3. TODO 多分支 : 多重判断
        System.out.println("多分支执行【杜老师改编】");
        System.out.println("第一步");
        System.out.println("第二步");
        // if ... else if ... [else]
        int 分数 = 59;
        if ( 分数 >= 90 ) {
            System.out.println("成绩:优秀");
        } else if (分数 >= 80) {
            System.out.println("成绩:良好");
        } else if (分数 >= 70) {
            System.out.println("成绩:中等");
        } else if (分数 >= 60) {
            System.out.println("成绩:及格");
        }
        else {
            System.out.println("成绩:不及格");
        }
        System.out.println("第三步");
    }
}
图5 多分支举例之1
图6 分支执行举例
package cn.du.ch03;

public class Java03_FlowControl {
    public static void main(String[] args) {

        // TODO 流程控制 - 分支执行
        // 特殊的分支结构
        // switch ( 数据 ) {}
        // switch语法会对数据进行判断,如果等于某一个分支数据的值,那么执行对应分支的逻辑代码
        // 如果一个分支都无法匹配,那么一个分支都不会执行,如果想要无法匹配也需要执行分支,那么可以增加default关键字
        // 如果执行某一个分支后,不想继续执行其他分支,那么可以使用break关键字,跳出分支结构
        System.out.println("多重分支1【杜老师改编】");
        System.out.println("第一步");
        System.out.println("第二步");
        String 学历 = "本科";
        switch (学历) {
            case "博士研究生" :
                System.out.println("你的学历是博士研究生。");
            case "硕士研究生" :
                System.out.println("你的学历是硕士研究生。");
            case "本科" :
                System.out.println("你的学历是本科。");
            case "大专" :
                System.out.println("你的学历是大专。");
            case "中专" :
                System.out.println("你的学历是中专。");
            default:
                System.out.println("你的学历是其他。");
        }
        System.out.println("第三步\n");

        System.out.println("多重分支2【杜老师改编】");
        System.out.println("第一步");
        System.out.println("第二步");
        学历 = "硕士研究生";
        switch (学历) {
            case "博士研究生" :
                System.out.println("你的学历是博士研究生。");
                break;
            case "硕士研究生" :
                System.out.println("你的学历是硕士研究生。");
                break;
            case "本科" :
                System.out.println("你的学历是本科。");
                break;
            case "大专" :
                System.out.println("你的学历是大专。");
                break;
            case "中专" :
                System.out.println("你的学历是中专。");
                break;
            default:
                System.out.println("你的学历是其他。");
        }
        System.out.println("第三步\n");
    }
}
图7 多分支举例之2
package cn.du.ch03;

public class Java04_FlowControl_Test {
    public static void main(String[] args) {

        // TODO 流程控制 - 分支执行 - 小练习
        System.out.println("分支执行练习【杜老师测试】");
        int age = 45;
        // 儿童(0~6),少年(7~17),青年(18~40),中年(41~ 65),老年(66)
        // if ... else if ... else if... else :多分支判断
        // switch...case ...case ... default : 等值分支判断
        if ( age < 7 ) {
            System.out.println("儿童");
        } else if ( age >= 7 && age < 18  ) {
            System.out.println("少年");
        } else if ( age >= 18 && age < 41 ) {
            System.out.println("青年");
        } else if ( age >= 41 && age < 66 ) {
            System.out.println("中年");
        } else {
            System.out.println("老年");
        }

        if ( age < 7 ) {
            System.out.println("儿童");
        } else if ( age < 18  ) {
            System.out.println("少年");
        } else if ( age < 41 ) {
            System.out.println("青年");
        } else if ( age < 66 ) {
            System.out.println("中年");
        } else {
            System.out.println("老年");
        }
    }
}
图7 多分支小练习

3.3 循环执行

图9 循环执行

【例题5】循环控制举例

package cn.du.ch03;
public class Java05_FlowControl {
    public static void main(String[] args) {

        // TODO 流程控制 - 重复执行(循环执行)
        // 根据条件重复执行某段代码
        // Java中主要用于循环的语法有3个:
        // 1. while :有条件循环
        //   while ( 条件表达式 ) { 需要循环的代码 }
        // 基本的执行原理:while循环会判断条件表达式的结果是否为true
        //     如果为false,跳出循环结构
        //     如果为true,会执行大括号内的逻辑代码,代码执行完毕后,会重新对条件表达式进行判断
        System.out.println("1. while循环【杜老师改编】");
        System.out.println("第一步。循环开始之前");
        int age = 35;
        while ( age < 40 ) {
            System.out.println("循环的代码。当前的age="+age);
            age++;
        }
        System.out.println("第二步。循环结束之后\n");
        // 2. do...while
        // 语法执行原理和while语法基本相同,区别就在于循环代码是否至少执行一次。
        // while循环语法可能执行,可能不执行
        // do...while循环语法中的循环代码至少执行一次
        /*
          基本语法结构:
           do {
               循环代码
           } while (条件表达式)

         */
        System.out.println("2. do {} while循环【杜老师改编】");
        System.out.println("第一步。循环开始之前");
        age = 35;
        do {
            System.out.println("循环的代码。当前的age="+age);
            age++;
        } while ( age < 40 );
        System.out.println("第二步。循环结束之后\n");

        // 3. for
        // 如果条件表达式返回结果为false,那么跳过循环语句,直接执行后续代码,如果返回结果为true,那么执行循环代码
        // 初始化表达式用于对条件表达式中使用到的变量进行初始化
        // 循环代码执行后,会重新进行条件表达式的判断,如果判断结果为true,会重复执行循环代码
        /*
         for ( 初始化表达式; 条件表达式; 更新表达式 ) {
             循环的代码
         }
         */
        System.out.println("3. for循环【杜老师改编】");
        System.out.println("第一步。循环开始之前");
        for ( int i = 35;i < 40;i++) {
            System.out.println("循环的代码。指针变量i="+i);
        }
        System.out.println("第二步。循环结束之后");

    }
}
图10 循环执行举例

【例题6】continue/break语句

package cn.du.ch03;

public class Java06_FlowControl_1 {
    public static void main(String[] args) {
        System.out.println("for语句测试【杜老师改编】");
        // TODO 流程控制 - 重复执行(循环执行)
        for ( int i = 0; i < 8; i++ ) {
            if ( i == 4 ) {
                // 第4不打印
            } else {
                System.out.println("循环指针i="+i);
            }
        }

        // break关键字直接会跳出循环,不再执行循环后续的操作
        // continue关键字直接会跳过当前循环,执行下一次循环
        System.out.println("\n break 语句测试");
        for ( int i = 0; i < 8; i++ ) {
            if ( i == 4 ) {
                // 切断,跳出循环
                break;
            }
            System.out.println("循环指针i="+i);
        }

        System.out.println("\n continue语句测试");
        for ( int i = 0; i < 8; i++ ) {
            if ( i == 4 ) {
                System.out.println("continue之前的语句");
                // 返回头部,跳出循环
                continue;
            }
            System.out.println("循环指针i="+i);
        }
    }
}
图11 continue/break语举例

【例题7】循环控制小练习----九层妖塔

package cn.du.ch03;

public class Java07_FlowControl_Test {
    public static void main(String[] args) {

        // TODO 流程控制 - 小练习 九层妖塔
        /*
              *
             ***
            *****
           *******

           4 => 0 -> 3
           4 => 1 -> 2
           4 => 2 -> 1
        */
        System.out.println("循环控制小练习----九层妖塔【杜老师改编】");
        // 打印第一层的数据
        for (int i = 0; i < 1; i++) {
            System.out.print("*");
        }
        System.out.println("");

        // 打印第二层的数据
        // println方法打印字符串之后,会自动添加换行符
        // print方法打印字符串后,不换行
        for (int i = 0; i < 3; i++) {
            System.out.print("*");
        }
        System.out.println("");

        // 打印第三层的数据
        for (int i = 0; i < 5; i++) {
            System.out.print("*");
        }
        System.out.println("");
        // 打印第四层的数据
        for (int i = 0; i < 7; i++) {
            System.out.print("*");
        }
        System.out.println("\n");

        int level = 9;
        for ( int j = 0; j < level; j++ ) {
            for ( int i = 0; i < (level-1) - j; i++ ) {
                System.out.print(" ");
            }
            for (int i = 0; i < j * 2 + 1; i++) {
                System.out.print("*");
            }
            System.out.println("");
        }
    }
}
图12 循环控制小练习

【例题8】循环控制----for each

package cn.du.ch03;

public class Java08_FlowControl {
    public static void main(String[] args) {

        // TODO 流程控制 - for each
        System.out.println("流程控制 - for each【杜老师改编】");
        String 直辖市[] = {"北京市", "天津市", "上海市", "重庆市"};
        System.out.println("逐个输出一维数组的元素:");
        for (String x : 直辖市) {
            System.out.println(x);
        }
        String 区市[][] = {{"新疆", "西藏", "广西", "宁夏", "内蒙古"}, {"北京", "天津", "上海", "重庆"}, {"香港", "澳门"}};
        System.out.println("逐个输出二维数组的元素: ");
        for (String x[] : 区市) {
            for (String y : x)
                System.out.printf("%-6s", y);
            System.out.println();
        }
    }
}
图13 循环控制 for each
图14 ch03 流程控制

返回