美文网首页
【骚全带你学Java---八、流程控制语句】

【骚全带你学Java---八、流程控制语句】

作者: 全栈攻城狮DWQ | 来源:发表于2018-07-11 09:58 被阅读10621次
    duwenquan-方形LOGO.png

    java的流程控制语句包含条件语句和循环语句

    一.什么是流程控制语句?

    ·流程控制语句:可以控制程序的执行流程。

    二.流程控制语句的分类

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

    总的来说:写在前面的先执行,写在后面的后执行

    • 2·选择结构
        选择结构 也被称为分支结构。

    选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。

    Java语言提供了两种选择结构语句 if语句 switch语句。

         2.1 if语句有三种格式(选择结构)

    ① if语句第一种格式:

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

    执行流程: 首先判断关系表达式看其结果是true还是false

    如果是true就执行语句体

    如果是false就不执行语句体

    流程控制体1.png
    注意:

    关系表达式无论简单还是复杂,结果必须是boolean类型

    if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。

    一般来说:有左大括号就没有分号,有分号就没有左大括号  例如:

    int b = 100;
    if(b != 100); //这里其实是有语句体的,只不过是空语句体。
    
    //代码块
    {
    System.out.println("b的值是100");
    System.out.println("over");
    }
    

    ② if语句第二种格式:

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

    执行流程: 首先判断关系表达式看其结果是true还是false

    如果是true就执行语句体1

    如果是false就执行语句体2

    流程语句2.png
    注意:else后面是没有比较表达式的,只有if后面有。

    三元运算符实现的,都可以采用if语句实现。反之不成立。
    什么时候if语句实现不能用三元改进呢?
      当if语句控制的操作是一个输出语句的时候就不能。
      为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。

    class IfDemo4 {
      public static void main(String[] args) {
        //获取两个数据的最大值
        int a = 10;
        int b = 20;
    
        //用if语句实现
        int max1;
        if(a > b) {
          max1 = a;
        }else {
          max1 = b;
        }
        System.out.println("max1:"+max1);
    
        //用三元改进
        int max2 = (a > b)? a: b;
        System.out.println("max2:"+max2);
        System.out.println("----------");
    
        //判断一个数据是奇数还是偶数,并输出是奇数还是偶数
        int x = 100;
    
        if(x%2 == 0) {
          System.out.println("100是一个偶数");
        }else {
          System.out.println("100是一个奇数");
        } 
    
        //用三元改进;这种改进是错误的。
        //String s = (x%2 == 0)?System.out.println("100是一个偶数");:System.out.println("100是一个奇数");;
       }
     }
    

    ③ if语句第三种格式:

      if(关系表达式1) {
    
        语句体1;
    
      }else if (关系表达式2) {
    
        语句体2;
    
      } …
    
      else {
    
        语句体n+1;
    
      }
    

    执行流程: 首先判断关系表达式1看其结果是true还是false

    如果是true就执行语句体1

    如果是false就继续判断关系表达式2看其结果是true还是false

    如果是true就执行语句体2

    如果是false就继续判断关系表达式…看其结果是true还是false

    如果没有任何关系表达式为true,就执行语句体n+1。

    第三种语句体.png
    ④ 嵌套 if 语句

    只有当外层 if 的条件成立时,才会判断内层 if 的条件。

     语法:
    
    if(条件1){
       if(条件2){
    代码块1
      }else{
    代码块2
    }
    }else{
    代码块3
    }
    

    执行过程:


    流程语句4.jpg

    示例代码:

    String today="周末";
    String weather="晴";
    if(today.equals("周末")){
     if(weather.equals("晴")){
       System.out.print("去室外游乐场玩");
       }else{
      System.out.println("去室内游乐场玩");
       }
    }else{
    System.out.println("去上班吧还是");
    }
    

    2.2 switch语句(选择结构)

    switch语句格式:
    
      switch(表达式) {
    
        case 值1:
    
          语句体1;
    
          break;
    
        case 值2:
    
          语句体2;
    
          break;
    
         …
    
        default:
    
          语句体n+1;
    
          break;
    
      }
    

    格式解释:

    switch表示这是switch语句

    表达式的取值:byte,short,int,char

    JDK5以后可以是枚举

    JDK7以后可以是String

    case后面跟的是要和表达式进行比较的值

    语句体部分可以是一条或多条语句

    break表示中断,结束的意思,可以结束switch语句

    default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。

    执行流程:

    首先计算出表达式的值

    其次,和case依次比较,一旦有对应的值,就会执行

    相应的语句,在执行的过程中,遇到break就会结束。

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

    示例代码:

    int num=1;
    switch(num){
          case 1:
           System.out.printlb("奖励iPhone1台");
           break;
         case 2:
           System.out.printlb("奖励帕拉梅拉一台");
           break;
        case 3:
           System.out.printlb("奖励奔驰G500一台");
           break;
        default:
           System.out.printlb("奖励杨柳春风别墅一套");
    }
    

    不得不说的几点小秘密:
    1、 switch 后面小括号中表达式的值必须是整型或字符型
    2、 case 后面的值可以是常量数值,如 1、2;也可以是一个常量表达式,如 2+2 ;但不能是变量或带有变量的表达式,如 a * 2
    3、 case 匹配后,执行匹配块里的程序代码,如果没有遇见 break 会继续执行下一个的 case 块的内容,直到遇到 break 语句或者 switch 语句块结束:

    int num=1;
    switch(num){
          case 1:
           System.out.printlb("奖励iPhone1台");
         case 2:
           System.out.printlb("奖励帕拉梅拉一台");
        case 3:
           System.out.printlb("奖励奔驰G500一台");
        default:
           System.out.printlb("奖励杨柳春风别墅一套");
    }
    //运行结果是:
    /**
    奖励iPhone1台
    奖励帕拉梅拉一台
    奖励奔驰G500一台
    奖励杨柳春风别墅一套
    **/
    

    4、 可以把功能相同的 case 语句合并起来,如

    case1:
    case2:
    System.out.println("奖励帕拉梅拉一台");
    

    5、 default 块可以出现在任意位置,也可以省略

    • 3·循环结构
      循环语句的组成
        初始化语句:
          一条或者多条语句,这些语句完成一些初始化操作。
        判断条件语句:
          这是一个boolean 表达式,这个表达式能决定是否执行循环体。
        循环体语句:
          这个部分是循环体语句,也就是我们要多次做的事情。
        控制条件语句:
          这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。
      3.1 Java循环语句 for

    for循环语句格式:

      for(初始化语句;判断条件语句;控制条件语句) {
        循环体语句;
      }
    

    执行流程:
      A:执行初始化语句
      B:执行判断条件语句,看其结果是true还是false
        如果是false,循环结束。
        如果是true,继续执行。
      C:执行循环体语句
      D:执行控制条件语句
      E:回到B继续

    for循环语句.png
    注意事项:
    A:判断条件语句无论简单还是复杂结果是boolean类型。
    B:循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
    C:一般来说:有左大括号就没有分号,有分号就没有左大括号

    需要留心的几个小细节:

    1、 for 关键字后面括号中的三个表达式必须用 “;” 隔开,三个表达式都可以省略,但 “;” 不能省略。
    a. 省略 “初始化语句”,可以在 for 语句之前由赋值语句进行变量初始化操作,如:

    int i=0;//循环变量i在for语句之前赋值
    for(;i<10;i++){//省略初始化变量
     System.out.println("我想要帕拉梅拉");
    }
    

    b. 省略 “判断条件语句”,可能会造成循环将一直执行下去,也就是我们常说的“死循环”现象,如:

    
    for(int i=0;;i++){//省略循环条件
     System.out.println("我想要帕拉梅拉");
    }
    

    在编程过程中要避免“死循环”的出现,因此,对于上面的代码可以在循环体中使用 break 强制跳出循环(关于 break 的用法会在后面介绍)。
    c. 省略 “控制条件语句”,可以在循环体中进行循环变量的变化,如:

    
    for(int i=0;i<10;){//省略循环条件
     System.out.println("我想要帕拉梅拉");
     i++;//在循环体中改变变量i的值
    }
    

    2、 for 循环变量初始化和循环变量变化部分,可以是使用 “,” 同时初始化或改变多个循环变量的值,如:

    for(int i=0,j=5; i<=5;i++;j--){
    System.out.print(i+"+"+j+"="+(i+j));
    }
    // 代码中,初始化变量部分同时对两个变量 i 和 j 赋值,循环变量变化部分也同时对两个变量进行变化,运行结果:
    /**
    1+5=6
    2+4=6
    3+3=6
    4+2=6
    5+1=6
    **/
    

    3、 循环条件部分可以使用逻辑运算符组合的表达式,表示复杂判断条件,但一定注意运算的优先级,如:

    for(i=0;i<10&&i != 5;i++){
    System.out.println(i);
    }
    //    代码中,必须同时满足变量 i 小于 10 ,并且 i 不等于 5 时才会进行循环,输出变量 i 的值。(运算结果:1.2.3.4)到5截止
    

    3.2 Java循环语句 while
    while循环语句格式:

     // 基本格式
        while(判断条件语句) {
          循环体语句;
        }
      //扩展格式
        初始化语句;
        while(判断条件语句) {
          循环体语句;
          控制条件语句;
         }
    
    //无限循环:   
    
      while(true){  } 
    

    执行流程:


    while.png

    补充:for循环语句和while循环语句可以等价转换,但还是有些小区别的

    使用区别:

    控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。

    原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。

    场景区别:
      for循环适合针对一个范围判断进行操作
      while循环适合判断次数不明确操作

    3.3 Java循环语句 do...while

    do…while循环语句格式:
      //基本格式
        do {
          循环体语句;
        }while((判断条件语句);
      //扩展格式
        初始化语句;
        do {
          循环体语句;
          控制条件语句;
        } while((判断条件语句);
    

    执行流程:

    1,先执行一遍循环体语句和控制条件语句,然后执行 判断条件语句 判断循环条件是否成立
    2,如果条件成立,继续执行1、2步骤,直到循环条件不成立为止。

    特点: 先执行,后判断


    dowhile.png

    三种循环的区别:

    1> do...while循环至少执行一次循环体;而 for , while循环必须先判断条件是否成立,然后决定是否执行循环体语句。

    2> 优先考虑for,其次考虑while,最后考虑do...while

    3> do...while循环以 ; 做结束,其它的循环以 { } 做结束。

    死循环的注意事项:
    1> 缺失控制条件语句 会造成死循环
    2> 两种最简单的死循环格式

      while(true){...}
      for(; ;){...}
    

    循环嵌套:循环语句的循环体本身 是一个循环语句。

    Java循环跳转语句 break
    生活中,我们经常会因为某些原因中断既定的任务安排。在 Java 中,我们可以使用 break 语句退出指定的循环,直接执行循环后面的代码。
    例如,使用循环输出 1--10的数值,其中,如果数值大于 2 ,并且为 3 的倍数则停止输出。示例代码:

    public static void main (String[] args){
       for(int i=0;i<=10;i++){
      //判断i>2,且为3的倍数, 
          if(i>2&&i%3==0){
             break;//通过break结束循环,执行循环后的语句
       }
      System.out.println(i);
    }
    System.out.println("循环结束了");
    }
    

    运行结果:1 2 结束啦

    Java循环跳转语句 continue
    continue 的作用是跳过循环体中剩余的语句执行下一次循环。

    例如,打印 1--10 之间所有的偶数,示例代码:

    for (int i=0;i<=10;i++){
    //判断i是否为偶数
    if(i%2!=0){
    continue;//用过continue结束本次循环,直接进入下次循环
    }
    System.out.println(i);
    }
    

    运行结果:2.4.6.8.10

    扩展:
    return和break以及continue的区别
    return是结束方法
    break是跳出循环
    continue是终止本次循环继续下次循环

    相关文章

      网友评论

          本文标题:【骚全带你学Java---八、流程控制语句】

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