java语法基础(四)—流程控制之选择语句

1、选择语句?

1.1、if 语句?

  • 语法: if(条件表达式){ if 执行体}

    if( ){ }

    ​ { } 的内容只有一句时,大括号可以省略不写

条件表达式: 结果是boolean类型字面值

if 执行体:main方法可以写的内容,if 执行体都可以写

		(1.变量   2.输出语句  3.流程控制语句)

理解: 条件表达式成立,if 执行体执行,条件表达式不成立,不执行 if 执行体。


if 语句流程图:

if

案例:考试成绩及格,爸爸带我去游乐场!

代码实现:

public class IfExample {
    public static void main(String[] args) {
        
        double score =80;
        
        if(score>=60) {
            System.out.println("爸爸带我去游乐场");
            
         }
     }
 }

运行结果:

  • 注意问题:

    ①语法问题
    if() 后面没有分号,如果写了分号不报错!

    ②省略大括号,只限于大括号内只有一句!

    ③局部变量的作用域
    省略大括号的前提条件是只能是一句,但是这句不能是定义的一个局部变量,因为,{ }作用是定义这个局部变量的作用域!

1.2、if-else语句?

  • 语法: if (条件表达式) {if体} else {else体}

if ( ) { } else { }

理解: 如果条件表达式成立,执行 if 体,否则,执行else体
if-else要么执行 if 体要么执行else体,一定会执行一个!


if-else 流程图



案例:如果考试成绩及格,爸爸带我去游乐场,否则爸爸揍我一顿!

代码实现:

public class IfElseExample {
    public static void main(String[] args) {
        double score = 50;
        if (score >= 60) {
            System.out.println("爸爸带我去游乐场");
        }else{
            System.out.println("爸爸揍我一顿");
            
        }
    }
}

运行结果:



练习:判断一个年份是否是闰年,闰年的条件是符合下面二者之一

​ (1) 年份能被 4 整除,但不能被 100 整除;

​ (2) 能被 400

代码实现:

//思路:
//1. 定义 int year 保存年份
//2. 年份能被 4 整除,但不能被 100 整除  => year % 4 == 0 && year % 100 != 0
//3. 能被 400 整除   => year % 400 == 0

public class LeapYear {
    public static void main(String[] args) {
        int year = 2020;
        if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)){
            System.out.println("闰年");
        } else {
            System.out.println("普通年份");
        }
    }
}

运行结果:

在这里插入图片描述

1.3、if-else-if多分支语句?

  • 语法: if (条件1) { 执行体1 }
       else if (条件2) { 执行体2 }
       else if (条件3) { 执行体3 }
       …
       else { else 执行体 }

理解: 条件1如果成立,执行体1,程序结束
  条件1如果不成立,判断条件2,条件2如果成立,执行条件2,程序结束
  如果条件2还不成立,继续判断条件3…
  以上所有的条件都不成立,执行else体

注意问题: 无论是怎么执行,都必须执行一个执行体,也只能执行一个执行体!


if-else-if 流程图

if-else-if

案例:小张在系统输入考试成绩,让系统告诉他,他的等级是什么?
90~100 优秀!
80~90 良好!
70~80 中等!
60~70 及格!
60以下 不及格!

代码实现:

import java.util.Scanner;

public class IfElseIfExample {
    public static void main(String[] args) {
        //1.创建Scanner类的对象
        Scanner sc = new Scanner(System.in);
        //2.提示用户输入成绩
        System.out.println("请输入考试成绩");
        //3.获取用户输入的成绩
        double score = sc.nextDouble();
        //4.判断成绩等级
        if(score >= 90){
            System.out.println("优秀");
        } else if (score >= 80){
            System.out.println("良好");
        } else if (score >= 70){
            System.out.println("中等");
        } else if (score >= 60){
            System.out.println("及格");
        } else {
            System.out.println("不及格");
        }
    }
}

输入不同成绩,代码运行结果如下:
image-20220329100346011

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

运行结果完全没有问题,证明这个语句是正确的。


1.4、if 嵌套语句?

  • 语法:

    if( ) {
    	   if( ) {
    		// if-else ...
    	   } else {
    		// if-else
    	   }
    }
    

理解: 在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支,外面的分支结构称为外层分支。

建议: 嵌套不要超过 3 层,因为可读性不好。

if(外分支){ 
 // 外为 true 时执行的代码
 if(内分支){ 
 // 内为 true 时执行的代码
 	} 
} 

案例:人的年龄大于或等于18岁时为未成年人

代码实现:

public class NestedIfExample {
    public static void main(String[] args) {
        int age = 20;
        boolean Maiores = true;
        if (age >= 18){
            if (Maiores){
                System.out.println("成年人");
            }
        }
    }
}

运行结果:
image-20220329103838234

1.5、switch 语句?

  • 语法:

    switch(字面值) {
        case 字面值1:
         语句1...
        break;
        case 字面值2:
         语句2...
        break;
        case 字面值3:
         语句3...
        break;
        ...
        default:
         语句...                 
    }
    

关键字翻译:

switch 开关
case 一种情况,一种可能
break 结束swtich语句
default 默认的,以上所有的情况都不执行时,执行default语句

  • 理解: switch的字面值和case字面值进行比对,如果跟那一个case的字面值相同就执行哪一个case语句,如果都不相同,执行default的语句。

    注意: 每一个case的值不能是相同的!

案例:用户在控制台输入1到5,程序输出相应的日计划!
例如,用户输入1, 系统:周一,写代码!

代码实现:

/*日计划:
     周一 ---------  写代码
	 周二 ---------  约会
     周三 ---------  看电影
     周四 ---------  爬山
     周五 ---------  游泳
     */

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        //1.创建Scanner类的对象
        Scanner sc = new Scanner(System.in);
        
        //2.提示用户输入1到5
        System.out.println("请输入数字15,分别表示周一到周五,
        					看看自己的日计划是什么?");
        //3.获取用户输入的1到5
        int i = sc.nextInt();
        
        //4.使用switch语句判断
        switch(i){
            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;
            default:
                System.out.println("你输入的不是周一到周五");

        }
    }
}

运行结果:
image-20220329155731902

  • 注意问题:

    1.case穿透问题

    原因:没有写break ,执行后System.out.println( )的 内容会全部输出

    2.case并列问题
    case可以并列,注意case的值不要相同,case 字面值 后用’ : ’ (英文冒号)隔开

案例:控制台输入月份,系统显示季节!
例如:5 系统:春天!
春天---------3 4 5
夏天---------6 7 8
秋天---------9 10 11
冬天---------12 1 2

代码实现:

  import java.util.Scanner;
  
  public class Demo02 {
      public static void main(String[] args) {
          //1.创建Scanner类的对象
          Scanner sc = new Scanner(System.in);
          //2.提示用户输入一个月份
          System.out.println("请输入月份:");
          //3.获取用户输入的月份
          int month = sc.nextInt();
          //4.switch判断
          switch (month){
              //用户输入的月份是3 或4或 5都执行春天!
              case 3: case 4: case 5:
                  System.out.println("春天!");
                  break;
              case 6: case 7: case 8:
                  System.out.println("夏天!");
                  break;
              case 9: case 10: case 11:
                  System.out.println("秋天!");
                  break;
              case 12: case 1: case 2:
                  System.out.println("冬天!");
                  break;
              default:
                  System.out.println("你输入是月份不存在!");
          }
      }
  }

运行结果:
在这里插入图片描述

3.switch版本问题

jdk1.8 (8.0)版本支持的数据类型?

required: “ char, byte, short, int, Character, Byte, Short, Integer, String, or an enum ”

​ 不支持 long类型,double类型,boolean类型

jdk1.7(7.0)之前都不支持String字符串


选择语句就这些内容了,如果发现错误欢迎小伙伴们在评论区指正,感谢阅读。


版权声明:本文为m0_46600592原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。