一.前言
上一篇我们讲了引用类型,花费了大量时间和精力,反复的敲代码作为练习,相信兄弟们也多少会有一些收获,那今天咱们接着往下讲,java基础之选择结构!

在Java中我们有大量的控制语句,除了一般的顺序控制语句,条件控制语句,是我们最常用的一种语句,下面我们就来介绍语句的应用。
条件语句又称为分支语句,它通过对给定的条件进行判断,从而决定执行两个或多个分支中的哪一支。因此,在编写选择语句之前,应该首先明确判断条件是什么,并确定当判断结果为“真”或“假”时应分别执行什么样的操作(算法)。
条件语句是一种根据条件执行不同代码的语句,如果条件满足则执行一段代码,否则执行其他代码。可将条件语句认为是有点像起因和结果。一种更好的类比方式。
举个例子:父母可能会说的话,如下面的内容:“如果你把房间收拾干净了,你会得到冰淇凌。否则,你会有一个完整的同年(七匹狼~)”。
第一个起因是收拾干净房间,结果是可以得到冰淇凌。第二个起因是不干净的房间,结果是揍你一顿(获得完整的同年)。
在脚本上,可能需要创建类似的语句。可能如下面的内容一样:“如果变量mymoney的值大于10000,那么发送警告告知我的金融状况没问题。否则,发出警告,告知我需要更多钱!”
二、知识点介绍
1、概述
2、if语句
3、switch语句
三、知识点详解
1、概述
选择结构也被称为分支结构。选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
Java语言提供了两种选择结构语句
(1)if语句
(2)switch语句
2、if语句
2.1、if语句简介
在现实业务中,许多场景需要我们做出条件判断,而每一种条件对应一则业务逻辑。比如,如果考试超过60分,不需要补考,低于60分需要补考。再比如如果是管理员,则可以管理论坛,而普通游客却不可以等等。
对应这样需要选择的业务场景,我们可以使用if选择结构。
2.2、if语句格式
2.2.1、单条件判断(格式1)
满足if条件即执行,不满足不执行。如年龄大于18岁可以游戏防沉迷解除
if语句的语法格式:
if (条件语句){
  代码块
  
}
执行流程:
首先判断关系表达式看其结果是true还是false,如果是true就执行语句体,如果是false就不执行语句体。
流程图:

代码示例:
/*
  磊哥的java历险记-@51博客
  选择结构if语句的第一种格式,有可能一句话都不打印 
  
  格式:
  if(条件语句){ if括号内的条件语句是布尔类型,只有两种结果:true ,flase
  code;
  ...
  } 
 
  执行步骤:
  首先判断条件语句是否成立
  true:执行if{}中的代码
  false:不执行if{}中的代码
  */
代码演示:
package com.Test;
//1.导包
import java.util.Scanner;
public class Main{
    private  final  static  String name = "磊哥的java历险记-@51博客";
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的年龄: ");//磊哥的java历险记-@51博客
        int age = sc.nextInt();
        if(age >= 18){//
            System.out.println("年龄大于等于18岁,游戏解除防沉迷");
        }
        if(age < 18){
            System.out.println("年龄小于18岁,青少年每天游戏时间不得超过两个小时");
        }
        System.out.println("============="+name+"=============");
    }
}

2.2.2、互斥条件判断(格式2)
满足条件执行if语句体,不满足执行else语句体。如年龄大于18岁可以解除游戏防沉迷,小于18岁每天游戏时间不得超过两小时。
if语句第二种格式:
if(关系表达式) {
    语句体1;
    
  }else {
  
    语句体2;
  }
执行流程:
首先判断关系表达式看其结果是true还是false,如果是true就执行语句体1,如果是false就执行语句体2
流程图:

代码演示:
package com.Test;
/*
  磊哥的java历险记-@51博客
  选择结构if语句的第二种格式:总会打印一句话
  格式:
  if(条件语句){
  执行语句1;
  ...
  }else{
  执行语句2;
  ...
  }
  执行流程:
  首先判断条件语句是否成立
  true:执行if{}中的执行语句1
  false:执行else{}中的执行语句2
  */
import java.util.Scanner;
public class Main{
    private  final  static  String name = "磊哥的java历险记-@51博客";
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的年龄: ");
        int age = sc.nextInt();
        //if 和 else只走一个
        //条件成立,就不走else了
        if(age >= 18){
            System.out.println("年龄大于等于18岁,游戏解除防沉迷");
            //条件不成立,走else
        }else{
            System.out.println("年龄小于18岁,青少年每天游戏时间不得超过两个小时");
        }
        System.out.println("============="+name+"=============");
    }
}

2.2.3、多条件判断(格式3)
在多个条件中选择满足条件的if语句体执行。
例如,对一个学生的考试成绩进行等级的划分;如果分数大于等于80分,小于等于100分等级为优;如果分数大于等于70分,小于80分级为良;如果分数大于等于60分,小于70分等级为及格;60以下为不及格。
if语句第三种格式:
if (判断条件1) {
    执行语句1
  } else if (判断条件2) {
    执行语句2
  }
  ======================
  
  else if (判断条件n) {
   执行语句n
  } else {
    执行语句n+1
  }
执行流程:
首先判断关系表达式1看其结果是true还是false,如果是true就执行语句体1,如果是false就继续判断关系表达式2看其结果是true还是false,如果是true就执行语句体2,如果是false就继续判断关系表达式…看其结果是true还是false
…,如果没有任何关系表达式为true,就执行语句体n+1。
流程图:

代码演示:
package com.Test;
import java.util.Scanner;
/*
  磊哥的java历险记-@51博客
  选择结构if语句的第三种格式:终究会打印一个结果
  格式:
  if(条件1){
  条件1成立执行
  }else if(条件2){
  条件1不成立,条件2成立执行
  }
  .....
  else if(条件n){
  条件1,条件2...都不成立,条件n成立执行
  }else{
  所有条件都不满足,执行
  }
  
  需求:根据成绩判断成绩等级
  90-100分:优
  80-90分:良
  70-80分:中
  60-70分:及格
  0-60分:不及格
  其它成绩:非法成绩
  变量的作用域:在自己所在的{}内有效
  */
public class Main{
    private  final  static  String name = "磊哥的java历险记-@51博客";
    public static void main(String[] args){
        //创建接受键入对象
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的成绩: ");
        //调用键入方法
        double score = sc.nextInt();
        if(score >=90 && score <=100){
            System.out.println("成绩是"+score+",等级为优!");
        }else if(score >=80 && score <90){
            System.out.println("成绩是"+score+",等级为良!");
        }else if(score >=70 && score <80){
            System.out.println("成绩是"+score+",等级为中!");
        }else if(score >=60 && score <70){
            System.out.println("成绩是"+score+",等级为及格!");
        }else if(score >=0 && score <60) {
            String  falg = "这段话只有在这里才能用,其他代码块中不能调用";
            System.out.println(falg);
            System.out.println("成绩是"+score+",等级为不及格!");
        }else{
            //System.out.println(falg);//错误: 找不到符号,falg在其他代码块中
            System.out.println("成绩是"+score+",非法成绩!");
        }
        System.out.println("============="+name+"=============");
    }
}

小练习:比大小
代码演示:
package com.Test;
import java.util.Scanner;
public class Main {
    private  final  static  String name = "磊哥的java历险记-@51博客";
    public static void main(String[] args) {
        //创建对象
        Scanner sc = new Scanner(System.in);
        //接收数据
        System.out.println("请输入第一个数据:");
        int a = sc.nextInt();
        System.out.println("请输入第二个数据:");
        int b = sc.nextInt();
    //采用if语句格式2实现
        /*
        if(a>b){
        System.out.println("较大的值是:"+a);
        }else {
        System.out.println("较大的值是:"+b);
        }
        */
    //拿到较大的值之后,我未必想直接输出,所以我们定义变量接收这个较大的值
        int max;
        if(a>b){
            max = a;
        }else {
            max = b;
        }
        //可能做其他的操作
        //max += 100;
        System.out.println("较大的值是:"+max);
        System.out.println("============="+name+"=============");
    }
}

2.2.4、多层条件判断
在复杂的业务逻辑中,可以使用多层的条件判断代码是否执行。
如:60分以下的同学不及格重考,60分以上的同学不需要重考,这个区间又可以分为:优秀、良好、及格三个等级。
if(第一层条件){
     if(第二层条件){
        真正运行逻辑
    }
  }
代码演示:
package com.Test;
/*
  多层if语句:if语句嵌套
  格式:
  if(条件语句){
  if(条件语句){
  code;
  ...
  }
  }
  需求:
  成绩>= 60
  打印成绩合格,可以升级
  90-100分:优
  80-90分:良
  70-80分:中
  60-70分:及格
  成<60
  打印成绩不及格,需要补考
  */
import java.util.Scanner;
public class Main{
    private  final  static  String name = "磊哥的java历险记-@51博客";
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的成绩: ");
        int score = sc.nextInt();
        if(score >= 60 && score <=100){
            System.out.println("成绩合格,可以升级");
            if(score >=90 && score <=100){
                System.out.println("成绩是"+score+",等级为优!");
            }else if(score >=80 && score <90){
                System.out.println("成绩是"+score+",等级为良!");
            }else if(score >=70 && score <80){
                System.out.println("成绩是"+score+",等级为中!");
            }else{
                System.out.println("成绩是"+score+",等级为及格!");
            }
        }
        else if(score >=0 && score < 60){
            System.out.println("成绩不及格,需要补考");
        }else{
            System.out.println("非法成绩");
        }
        System.out.println("程序结束");
        System.out.println("============="+name+"=============");
    }
}

3、switch语句
3.1、选择结构_switch概念
在现实业务中,许多场景需要我们从多个固定的值中选出一个,执行该数值对应的操作。比如,在一周七天,当输入1-7会打印不同的星期。
对应这样的业务场景,我们可以使用switch选择结构。
3.2、格式switch格式
switch语句的格式:
switch (表达式){
    case 目标值1:执行语句1;break;
    case 目标值2:执行语句2;break;
    ......
    case 目标值n:执行语句n;break;
    default:执行语句n+1;break;
  }
执行流程:
首先计算出表达式的值,其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
流程图:

在上面的格式中,switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,会执行对应case后的语句,如果没找到任何匹配的值,就会执行default后的语句。break的作用是跳出switch语句。
代码演示:
/*
  需求:键盘输入对应1-7,输出对应的中文日期
  */
import java.util.Scanner;
public class Main{
    private  final  static  String name = "磊哥的java历险记-@51博客";
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入星期对应的数字:");
        int week = sc.nextInt();//2
        switch(week){
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期日");
                break;
            default:
                System.out.println("您输入的数字有误!");
                break;
        }
        System.out.println("程序结束");
        System.out.println("============="+name+"=============");
    }
}

3.3、switch注意事项
(1)switch表示这是switch语句
(2)表达式的取值只能是:byte,short,int,char,JDK5以后可以是枚举,JDK7以后可以是String
(3)如同if语句当中的else,default不是必须存在的,与if语句不同,switch语句只能完成具体值的选择,而不能指定取值区间,case后面跟的是要和表达式进行比较的值
(4)语句体部分可以是一条或多条语句
(5)break表示中断,结束的意思,可以结束switch语句,default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
(6)case条件只判断一次,在判断完一次case条件后,所有的case判断语句将不再起作用,而剩余语句征程执行。这是switch语句的穿透。(了解)
代码演示:
/*  
  磊哥的java历险记-@51博客
  
  需求:键盘输入对应1-7
  1-5:输出工作日
  6-7:输出休息日
  */
  import java.util.Scanner;
  public class Demo02Switch{
    public static void main(String[] args){
      Scanner sc = new Scanner(System.in);
      System.out.println("请输入星期对应的数字:");
      int week = sc.nextInt();//2
      switch(week){
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
      System.out.println("工作日");
      break;
      case 6:
      case 7:
      System.out.println("休息日");
      break;
      default:
      System.out.println("您输入的数字有误!");
      break;
      }
  System.out.println("程序结束");
}
}

结语:
选择结构是我们后面会经常用到的语句,所以初学者兄弟,在看完后可以跟着我的演示代码,自己动手打一打代码,会对选择结构的印象更加深刻。
我的文章不是最优秀的,但一定是相对简单的,一看能懂,一学就会的类型,所以希望大家也多多支持,多多关注,本系列持续更新!
感谢大家的持续关注! 

