美文网首页
Java开发 流程控制语句【学习篇3】

Java开发 流程控制语句【学习篇3】

作者: iOS_PM_WEB_尛鹏 | 来源:发表于2020-04-21 17:22 被阅读0次

    【作者前言】:13年入圈,分享些本人工作中遇到的点点滴滴那些事儿,17年刚开始写博客,高手勿喷!以分享交流为主,欢迎各路豪杰点评改进!
    {\color{#3f48cc}{\pmb{点击右上角小【1】快速预览本文内容}}} [1]

    🔥知识点内容【流程控制语句:条件分支语句、循环语句】

    🔓1. 条件分支语句【if、switch/case】

    1.1、if语句 [2]
    if(表达式){ 当表达式结果为真,所执行的代码 }
    表达式中返回的是布尔值

    image.png

    if(表达式){ 表达式为真执行代码 } else { 表达式为假执行的代码 }

    image.png
    int age = 10;
    if (age > 18) {
        System.out.println("你已经成年了!");
    }else {
        System.out.println("小朋友,你妈妈叫你回家吃饭啦!");
    }
    

    if(条件1){ 条件1为真执行的代码 } else if(条件2){ 条件2为真执行的代码 }

    Scanner sc = new Scanner(System.in);
    // 输入菜名选择序号 select
    int select = sc.nextInt();
    if (select == 1) {
        System.out.println("蒸羊羔");
    }else if (select == 2) {
        System.out.println("皮蛋豆腐");
    }else if (select == 3) {
        System.out.println("大馒头");
    }else if (select == 4) {
        System.out.println("燕窝");
    }else {
        System.out.println("选择错误,本店没有此菜!");
    }
    

    可以使用多个if语句判断 但是每个条件 不论是否满足 她都要去判断一边,if-else if形式,那么如果有一个条件满足 其他的条件就不去看

    1.2、switch语句 [3]
    有时候分支是根据常量值进行判断的,这时候虽然可以使用if/else来实现,但是用switch/case更为清晰;

    Scanner sc = new Scanner(System.in);
    // 输入菜名选择序号 select
    int select = sc.nextInt();
    switch(select) {
        case 1:System.out.println("蒸羊羔");break;
        case 2:System.out.println("皮蛋豆腐");break;
        case 3:System.out.println("大馒头");break;
        case 4:System.out.println("燕窝");break;
        default:System.out.println("选择错误,本店没有此菜!");break;
    }
    

    Break:在switch作用,跳出swtich语句
    switch/case中的表达式只能使用规定的基本数据类型
    JDK1.5前可以使用:
    基本数据类型byte
    基本数据类型short
    基本数据类型int
    字符型char
    不能使用:基本数据类型float、double、long、boolean
    JDK5之后,switch表达式类型新增加支持:枚举(enum)
    JDK7之后,switch表达式类型新增加支持:String


    🔓2. 循环语句【for、while、do while】
    2.1、for循环 [4]
    1)语法
    for(初始化语句;判断条件语句;控制语句){
    循环体语句块;
    }
    具体代码如下所示:

    int a;
    for(int a=0; a<5; a++){
      System.out.println("a="+a);
    }
    
    执行步骤:
    1、初始化a为0;
    2、判断a<5的返回值为true,所以执行一次循环体;打印a=0;
    3、运行控制语句a++,a变为1;
    4、判断a<5的返回值为true,再执行一次循环体;打印a=1;
    5、运行控制语句a++,a变为2;
    循环4-5步骤,直到打印a=4后,a变为5
    6、判断a<5返回false,则循环结束,跳出循环体。
    
    即最终循环执行输出的结果:
    a=0
    a=1
    a=2
    a=3
    a=4
    

    2)经典案例:for循环的应用

    • 求1~100之间所有整数和
    int sum = 0;
    for(int i = 1; i < 100; i ++) {
        sum += i;
    }
    System.out.println("1~100的和是:" + sum);
    
    • 求1-100之间所有奇数的和
    int sum = 0;
    for(int i = 1; i < 100; i+=2;) {
        sum += i;
    }
    System.out.println("1~100奇数的和是:" + sum);
    
    • 求阶乘
    int n = 6; // 假设求6的阶乘吧
    int result = 1; //阶乘的结果值
    for(int i = n; i >= 1; i --) {
        result *= i;
    }
    System.out.println(n + "的阶乘是:",result);
    
    • 如一个数是四位数abcd,该四位数满足条件:(ab+cd)*(ab+cd)=abcd;
      分析:
      将四位数的百位和千位ab,求出;再将十位和各位cd,求出
      abcd / 100 ---> ab
      abcd % 100 --->cd
    • 求水仙花数【3位数abc,a^3+b^3+c^3=abc】
    for(int i = 100; i <= 999; i ++) {
        int b = i / 100; // 百位上的数字
        int s = i / 10 % 10;// 十位上的数字
        int g = i % 10;// 个位上的数字
        // 验证水仙花数公式
        if((b * b * b + s * s * s + g * g * g) == i) {
            System.out.println("水仙花数为:" + i);
        }
    }
    

    3)循环嵌套

    • 打印 99 乘法表
    for(int j = 1; j < = 9; j ++) {
        for(int i = 1; i <= j; i ++) {
            System.out.println(i + "*" + j + "=" + (i * j) + "\t");
        }
        System.out.println(); // 相当于换行了...
    }
    
    • 打印等腰三角形
    int n = 4;
    for(int i = 1; i <= 4; i ++) {
        for(int m = 1; m <= n-i; m++) { // 每一行显示的空格 = 总行数 - 当前行数
            System.out.print(" ");
        }
        for(int j = 1; j <= 2 * i - 1; j++) {// 显示*的数 就是 行数*2 -1
            System.out.print("*");
        }
        System.out.println();// 相当于换行
    }
    

    小知识点:
    System.out.println(“”) 打印内容 并且 换行
    System.out.print(“”)打印内容 不换行
    “\t”:制表符 键盘Tab

    2.2、while循环 [5]
    1)语法
    while(判断条件语句){
    循环体语句块;
    控制语句;
    }
    将for循环三个表达式拆分,初始化放在while 前面初始化 判断语句放入到while的()里面,控制语句放入到while的{}

    具体代码如下所示:

    int b=0;
    while( b<5 ){
      System.out.println("b="+b);
      b++;
    }
    

    2)while循环的应用

    • 求1~100的和
    int i = 1;
    int sum = 0;
    while(i < 100) {
      sum += i;
      i ++;
    }
    System.out.println("1~100的和是:" + sum);
    

    小知识点:System.exit(0);退出系统

    • 无限循环(死循环)
    while(true) {
        System.out.println("----------欢迎来到尛鹏大酒店----------");
        System.out.println("1、凉菜");
        System.out.println("2、热菜");
        System.out.println("3、主食");
        System.out.println("4、汤");
        System.out.println("0、退出");
        System.out.println("----------------------------------");
        System.out.println("请选择:")
        // 创建Scanner对象
        Sanner sc = new Scanner(System.in);
        // 接收一下选择的数字
        int select = sc.nextInt();
        switch(select) {
            case 1:System.out.println("蒸羊羔");break;
            case 2:System.out.println("皮蛋豆腐");break;
            case 3:System.out.println("大馒头");break;
            case 4:System.out.println("燕窝");break;
            default:System.out.println("选择错误,本店没有此菜!");break;
        }
    }
    
    Q:for(;;){} 这样的语句会编译通过吗?如果通过,是个什么样的循环?
    A:可以编译通过,死循环 相当于
    While(true){
    }
    

    3)for、while 的使用场景区分

    for的使用:当我们知道循环次数的时候;
    while的使用:当不清楚循环次数的时候;

    2.3、do while循环 [6]
    1)语法
    do{
    循环体语句块;
    控制语句;
    } while(判断条件语句) ;

    具体代码如下所示:

    int c=0;
    do{
    System.out.println("c="+c);
    c++;
    }while(c<5);
    
    image.png

    2)while 与 do while的区别

    如果条件都为真,两者结果没有区别
    如果条件为假,do-while 至少会执行一次循环体,while不会执行循环体
    Do-while:先执行循环体,再去进行判断
    While : 先判断,再去执行循环体

    //------------↓↓↓ while ↓↓↓------------
    int m = 12;
    while(m <= 10) { 
      System.out.println("while------"+m);
      m ++;
    }
    // 输出结果:嘛也没有
    
    //------------↓↓↓ do while ↓↓↓------------
    int i = 12;
    do {
      System.out.println("do------"+i);
      i ++;
    }while(i <= 10);
    // 输出结果:
    // do------12
    

    🔓3. 循环关键字【continue、break】[7]

    continue

    在循环控制语句的循环体中,可以使用continue语句,表示不再继续循环体后面的代码,继续下一次循环
    即:在循环中遇到了continue,循环就不会继续执行当前关键字下面的其他循环内容,继续执行下一次循环(停止当前次循环,继续下一次循环)

    break

    在循环控制语句的循环体中,可以使用break语句,表示终止当前循环,跳出循环体
    即:循环终止

    🔓4. 多重循环跳出【加标号】[8]

    可以在for、while、do前用合法标识符加标号
    用break标号;语句终止指定的循环;
    Break+标号形式 终止指定层次的循环
    Continue+标号形式 跳出指定层次的循环 继续下一次循环

    loop:    for(int i = 1; i <= 5; i ++) {
                for(int j = 1; j <= 5; j ++)  {
                    if(j == 2) {
                        continue loop;
                        // break loop;
                    }
                    System.out.println("i = " + i + "\t  j=" + j);
                }
                System.out.println("-------第" + i + "次外层循环结束-------")
             }
    

    🔓4. 综合案例 - 实战·了解 [9]

    • 百钱买百鸡
    /* 3文钱 --- 1只公鸡   x
    *  2文钱 --- 1只母鸡   y
    *  1文钱 --- 3只小鸡   z
    *  Q:100文钱  怎么 买到 100只鸡?
    *  A:
    *  只要公鸡的话  100/3 = 33  max=33
    *  只要母鸡的话  100/2 = 50  max=50
    *  即:公鸡的取值范围 --- 0~33
    *         母鸡的取值范围 --- 0~50
    */
    for(int x = 0; x < 33; x ++) {
        for(int y=0; y < 50; y++) {
            //计算小鸡的数量
            int z = 100 - x - y;
            //小鸡数量的合法性验证
            if(z % 3 !=0) continue; //小鸡的数量一定是 3的倍数 不是的话直接进入下一轮循环
            // 再验证 钱数是否正确
            if(x * 3 + y * 2 + z / 3 == 100) {
               //钱数也合法 --- 即算出来了。。。
               System.out.println("公鸡:" + x + ",母鸡:" + y + ",小鸡:" + z);
            }
        }
    }
    
    • 任意数字 各个位数上的 数字之和

    abcde ---> a + b + c + d + e = ?

    // 设定一个任意的数字
    int n = 123456;
    int num = n;
    // 用来存储最后的和
    int sum = 0;
    while(n != 0) {
      // 取出最后一位数 加入到和中  如123456 % 10 = 6
      sum += (n % 10);
      // 加完后 将最后一位数 去掉  如 123456 / 10 = 12345
      n /= 10;
      //... 以此类推
    }
    System.out.println("输入的数值:" + num + ",各个位数上的数字之和是:" + sum);
    
    • 求数组中的最大值、最小值
    int[] arr = {50,66,25,33,45,18,55};
    // 定义一个最大值和最小值 
    int max = arr[0];
    int min = arr[0];
    for(int i = 1; i < arr.length; i++) {
        if(max < arr[i]) {
           max = arr[i];
        }
        if(min > arr[i]) {
           min = arr[i];
        }
    }
    System.out.println("max=" + max + ",min=" + min);
    
    • 杨辉三角
    int n = 10;
    int[][] arr = new int[n][n];
    for(int i = 0; i < arr.length; i ++) {
        arr[i][0] = 1;
        arr[i][i] = 1;
        if(i == 0) continue;
        for(int j = 1; j < arr[i].length; i ++) {
            arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
        }
    }
    
    for(int i = 0; i < arr.length; i ++) {
        for(int j = 0; j <= i; j++) {
            System.out.println(arr[i][j] + "\t");
        }
        System.out.println();
    }
    
    

    🔥2.应用场景:


    🔥3.实现目标:


    🔥4.代码实现:




    1. 🔥【知识点回顾·简介】 ↓↓↓

    2. 🔑[if语句]

    3. 🔑[switch语句]

    4. 🔑[for循环]

    5. 🔑[while循环]

    6. 🔑[do while循环]

    7. 🔑[循环关键字continue、break]

    8. 🔑[多重循环跳出]

    9. 🔑[综合案例·实战]

    相关文章

      网友评论

          本文标题:Java开发 流程控制语句【学习篇3】

          本文链接:https://www.haomeiwen.com/subject/jpfpihtx.html