Java基础语法 流程控制语句

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。

流程控制语句分类

顺序结构

分支结构(if, switch)

循环结构(for, while, do…while)

1.顺序结构

顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

2.分支结构

2. 1分支结构:if语句

if语句格式1

格式:
if (关系表达式) {
    语句体;    
}

if语句格式2

格式:
if (关系表达式) {
    语句体1;   
} else {
    语句体2;   
}

if语句格式3

格式:
if (关系表达式1) {
    语句体1;   
} else if (关系表达式2) {
    语句体2;   
} 
…
else {
    语句体n+1;
}
package com.itheima.branch;
​
public class ifDemo {
    public static void main(String[] args) {
      //学会if语句 if (条件表达式) {语句体;}
        //格式1心跳不正常,提醒检查
        int hearBeat = 30;
        if(hearBeat < 60 || hearBeat > 100){
            System.out.println("您的心跳是:" + hearBeat +",您可能需要进一步检查! ");
        }
        System.out.println("检查结束");
        //格式2 if (条件表达式) {语句体1;} else {语句体2;}
        //发红包
        double money = 1;
        if(money >= 1314){
            System.out.println("您当前发送红包成功");}
            else {
            System.out.println("您当前发送红包失败");}
        //格式3
        //绩效系统
        int score =99;
            if(score >=0 &&score <60) {
                System.out.println("您本月绩效是:C");
            }else    if(score >=60 &&score <80) {
                System.out.println("您本月绩效是:B");
            }else    if(score >=80 &&score <90) {
                System.out.println("您本月绩效是:A");
            }else    if(score >=90 &&score <=100) {
                System.out.println("您本月绩效是:A+");
            } else{
                        System.out.println("您输入的数不对");
                }
            }
        }
​

2.2 分支结构:switch语句

switch语句结构

  • 格式

    switch (表达式) {
        case 1:
            语句体1;
            break;
        case 2:
            语句体2;
            break;
        ...
        default:
            语句体n+1;
            break;
    }
  • 执行流程:

    • 首先计算出表达式的值

    • 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。

    • 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

      package com.itheima.branch;
      ​
      public class switchDemo2 {
          public static void main(String[] args) {
               // 周一:埋头苦干,解决bug     周五:今晚吃鸡
               // 周二:请求大牛程序员帮忙    周六:与王婆介绍的小芳相亲
               //周三:今晚啤酒、龙虾、小烧烤  周日:郁郁寡欢、准备上班。
               // 周四: 主动帮助新来的女程序解决bug
              String weekday = "周三";
              switch (weekday){
                  case "周一":
                  System.out.println("埋头苦干,解决bug");
                  break;
                  case "周二":
                      System.out.println("请求大牛程序员帮忙");
                      break;
                  case "周三":
                      System.out.println("今晚啤酒、龙虾、小烧烤");
                      break;
                  case "周四":
                      System.out.println(" 主动帮助新来的女程序解决bug");
                      break;
                  case "周五":
                      System.out.println("今晚吃鸡");
                      break;
                  case "周六":
                      System.out.println("与王婆介绍的小芳相亲");
                      break;
                  case "周日":
                  System.out.println("郁郁寡欢、准备上班");
                      break;
                  default:
                      System.out.println("数据有误!");
      ​
              }
          }
      }

      if、switch分支各自适合做什么业务场景?

      ⚫ if其实在功能上远远强大于switch。

      ⚫ if适合做区间匹配。

      ⚫ switch适合做:值匹配的分支选择、代码优雅。

      switch分支注意事项:

      ① 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、 不支持double、float、long。

      ② case给出的值不允许重复,且只能是字面量,不能是变量。

      ③ 不要忘记写break,否则会出现穿透现象。

      package com.itheima.branch;
      ​
      public class switchDemo3 {
          //清楚switch注意点
          public static void main(String[] args) {
              double a = 0.1+0.2;
              System.out.println(a);//不支持,因为在java中计算不精确,不支持double、float、long。
      //0.30000000000000004
          }
      }
      ​

      switch穿透性案例(月份天数查看器)

package com.itheima.branch;
​
public class switcDemo4 {
    public static void main(String[] args) {
        //  需求:用户输入月份可以展示该月份的天数。
        // 1、3 、5、 7 、 8、 10、 12月份是 31天
        //2月份是闰年为29天、非闰年为28天。
        // 4 、6 、9、 11月份 是30天
        int month = 7;
        
        switch(month){
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                System.out.println(month+"是31天");
                break;
                case 2:
                System.out.println(month+"闰年29天,非闰年28天");
                break;
                case 4:
                case 6:
                case 9:
                case 11:
                System.out.println(month+"是31天");
                break;
                
            
        }
    }
}
​
  • 注意:如果switch中得case,没有对应break的话,则会出现case穿透的现象。

3 循环结构:for循环

3.1 for循环结构(掌握)

  • for循环格式:

for (初始化语句;条件判断语句;条件控制语句) {
    循环体语句;
}
  • 格式解释:

    • 初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样

    • 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去

    • 循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情

    • 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去

  • 执行流程:

    ①执行初始化语句

    ②执行条件判断语句,看其结果是true还是false

    如果是false,循环结束

    如果是true,继续执行

    ③执行循环体语句

    ④执行条件控制语句

    ⑤回到②继续

    package com.nanci.loop;
    ​
    public class ForDemo1 {
        public static void main(String[] args) {
            for (int i = 0; i < 3; i++) {
                System.out.println("Hello World");//Hello World//Hello World//Hello World
                // 循环一开始,执行int i = 0 一次。
    // 然后判断循环条件:0 < 3 返回true ,进入到循环体中执行输出 :helloWorld ,然后执行迭代语句i++ , 此时i=1了。
    //然后判断循环条件:1 < 3 返回true ,进入到循环体中执行输出 :helloWorld ,然后执行迭代语句i++ , 此时i=2了。
    // 然后判断循环条件:2 < 3 返回true ,进入到循环体中执行输出 :helloWorld, 然后执行迭代语句i++ , 此时i=3了。
    //然后判断循环条件:3 < 3 返回false, 循环立即结束!
            }
            for (int i = 0; i <= 5; i += 2) {
                System.out.println("Hello World");//三次
            }
        }
    }

3.2 for循环练习-输出数据

  • 需求:在控制台输出1-5

  • 示例代码:

package com.nanci.loop;
​
public class ForDemo2 {
    public static void main(String[] args) {
        //需求:在控制台输出1-5
        int sum = 0;
        for (int i = 0; i <= 5; i++) {
            sum += i;//等价sum=sum+i
        }
        System.out.println("一到五的和是:"+sum);
    }
}

3.3 for循环练习-求奇数和

  • 需求:求1-10之间的奇数和,并把求和结果在控制台输出 }:

package com.nanci.loop;
​
public class ForDemo3 {
    public static void main(String[] args) {
        //方法一
                //求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0
                int sum = 0;
                //对1-100的数据求和与1-5的数据求和几乎完全一样,仅仅是结束条件不同
                for(int i=1; i<=10; i++) {
                    //对1-100的偶数求和,需要对求和操作添加限制条件,判断是否是偶数
                    if(i%2 == 1) {
                        sum += i;
                    }
                }
                //当循环执行完毕时,将最终数据打印出来
                System.out.println("1-10之间的奇数和是:" + sum);//1-10之间的奇数和是:25
        //方法二
        int sum1 = 0;
        for (int i = 1; i <= 10; i+=2) {
            sum1 +=i;
        }
        System.out.println("1-10之间的奇数和是:" + sum1);//1-10之间的奇数和是:25
            }
        }
​

方式一:在for循环中,通过if筛选出奇数 for (int i = 1; i <= 10; i++) { if (i % 2 == 1) { // i = 1 3 5 7…}}

方式二:直接使用for循环找出奇数。 for (int i = 1; i <= 10; i+=2) { }

3.4 for循环练习-水仙花 统计水仙花数个数

  • 需求:在控制台输出所有的“水仙花数” 统计“水仙花数”一共有多少个,并在控制台输出个数

  • 解释:什么是水仙花数?

    • 水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数

      • 例如153 3*3*3 + 5*5*5 + 1*1*1 = 153

  • 思路:

    1. 获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,使用for循环获取

    2. 获取每一个三位数的个位,十位,百位,做if语句判断是否是水仙花数

  • 示例代码

package com.nanci.loop;
​
public class ForDemo4 {
    public static void main(String[] args) {
        //需求:在控制台输出所有的“水仙花数”
        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;
            if(ge*ge*ge+shi*shi*shi+bai*bai*bai == i){
                System.out.print(i+"\t");//153  370 371 407 
                //print横行打印   \t加空格
                count++;
            }
        }
        System.out.println();//换行
        System.out.println("水仙花个数是: "+count);//水仙花个数是: 4
    }
}
  • 今后如果需求带有统计xxx,请先想到计数器变量

  • 计数器变量定义的位置,必须在循环外部

  • 如何计算出水仙花的个数?

    ⚫ 在循环外定义一个变量count用于记录水仙花数。

    ⚫ 每输出水仙花数时,让count++

4 循环结构: while循环

4.1 while结构

  • while循环完整格式:

    初始化语句;
    while (条件判断语句) {
        循环体语句;
        条件控制语句;
    }
  • while循环执行流程:

    ①执行初始化语句

    ②执行条件判断语句,看其结果是true还是false

    如果是false,循环结束

    如果是true,继续执行

    ③执行循环体语句

    ④执行条件控制语句

    ⑤回到②继续:

ackage com.nanci.loop;
​
public class whileDemo1 {
    public static void main(String[] args) {
        int i =0;
        while(i<3){
            System.out.println("nanci sir");
            i++;
        }
        System.out.println("------------");
        int j =0;
        while(j<3){
            System.out.println("nanci sir");//死循环
        }
    }
}

什么时候用for循环,什么时候用while循环?

⚫ 功能上是完全一样的,for能解决的while也能解决,反之亦然。

⚫ 使用规范是:知道循环几次:使用for;不知道循环几次建议使用:while。

4.2 while循环练习-珠穆朗玛峰

  • 需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?

public class WhileTest {
    public static void main(String[] args) {
        //定义一个计数器,初始值为0
        int count = 0;
        //定义纸张厚度
        double paper = 0.1;
        //定义珠穆朗玛峰的高度
        int zf = 8844430;
        //因为要反复折叠,所以要使用循环,但是不知道折叠多少次,这种情况下更适合使用while循环
        //折叠的过程中当纸张厚度大于珠峰就停止了,因此继续执行的要求是纸张厚度小于珠峰高度
        while(paper <= zf) {
            //循环的执行过程中每次纸张折叠,纸张的厚度要加倍
            paper *= 2;
            //在循环中执行累加,对应折叠了多少次
            count++;
        }
        //打印计数器的值
        System.out.println("需要折叠:" + count + "次");
    }
}

5 循环结构:do-while循环

5.1 do...while循环结构

  • 完整格式:

    初始化语句;
    do {
        循环体语句;
        条件控制语句;
    }while(条件判断语句);
package com.nanci.loop;
​
public class DowhileDemo1 {
    public static void main(String[] args) {
        //学会do while
        int i  = 0;
        do{
            System.out.println("nanci");
            i++;
        }while(i<3);
    }
}
​

6 三种循环的区别(理解)

6.1 三种循环的区别

  • for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)

  • do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)

6.2 for循环和while的区别

  • 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了

  • 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用

6.3 死循环(无限循环)的三种格式

  1. for(;;){}

  2. while(true){}

  3. do {} while(true);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张南辞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值