第3章 分支结构

课程回顾

变量的概念: 变量是一块存储空间的表示,

8种基本数据类型:

整型: byte short int long

浮点型: float double

字符: char

布尔: boolean

引用数据类型:

class定义的类, String Scanner

interface定义的接口

数组类型 int[] nums = {1,2,3,4};

运算符:

算术运算符

关系运算符

逻辑运算符

三元运算符

赋值运算符

移位运算符

Scanner的用法

Scanner是一个类,该类是jdk提供的一个工具类,用来向程序输入数据的。输出语句System.out.println;程序还要能够接收用户的数据。打败你与你无关,降维打击:高纬度的生物消灭低纬度生物,人三维的环境,灭掉二维的蚂蚁,三体: 地球往事、黑暗森林、死神永生。一个人带领中国科幻走向世界之巅。 歌者: 二向箔,把三维的太阳系的坍缩成绝对的二维。

Scanner的使用分为三步:

  • 导入Scanner类: Scanner是jdk提供工具类,我们的程序要导入
  • 创建Scanner对象
  • 调用相应的方法

案例:

import java.util.Scanner; //1.导入Scanner工具类

public class Demo8{

    public static void main(String [] args){
        Scanner input = new Scanner(System.in);//2.创建Scanner对象
        System.out.print("请输入姓名:");
        String name = input.next();//3.调用next方法获取用户的输入
        System.out.print("请输入年龄:");
        int age = input.nextInt();
        System.out.print("请输入身高:");
        double height = input.nextDouble();
        System.out.print("请输入性别:");
        char sex = input.next().charAt(0);
        System.out.println("姓名:"+name);
        System.out.println("年龄:"+age);
        System.out.println("身高:"+height);
        System.out.println("性别:"+sex);
        input.close();
    }

}

程序结构

程序的结构主要包括三种: ①顺序结构②分支结构③循环结构

顺序结构

所有的程序从宏观角度都是顺序执行,自上而下依次执行程序逻辑。也是最简单的程序结构。但是从具体的业务模块来说有肯能是其他的条件结构、或者是循环结构。微观角度是分支或者循环多一点。

上面的Scanner用法的案例就是顺序结构,没有条件,程序依次逐行执行。

分支结构

分支结构是有条件判断的业务,有些业务逻辑需要满足一定的条件才可以执行;否则不执行。点外卖,条件是周围三公里之内的门店,否则不点商户的外卖。骑单车,如果有免费卡就骑单车,否则不骑车。分支结构的两种实现方式if结构,switch结构。

if分支

①简单结构

语法:

if ( 条件表达式 ){
    //业务代码块
}
表达式处理则执行业务代码块
否则不执行业务代码块

需求:请输入小明的成绩,判断是否及格。

import java.util.Scanner; //1.导入Scanner工具类

public class Demo9{

    public static void main(String [] args){
        Scanner input = new Scanner(System.in);//2.创建Scanner对象
        System.out.print("请输入小明的成绩:");
        int score = input.nextInt();//接收用户的输入

        if(score > 60){
            System.out.println("成绩及格");
        }

        System.out.println("程序结束....");
        input.close();
    }

}

②if—else结构

需求:请输入小明的成绩,判断是否及格。

import java.util.Scanner; //1.导入Scanner工具类

public class Demo10{

    public static void main(String [] args){
        Scanner input = new Scanner(System.in);//2.创建Scanner对象
        System.out.print("请输入小明的成绩:");
        int score = input.nextInt();//接收用户的输入

        if(score > 60){
            System.out.println("成绩及格");
        } else {
            System.out.println("成绩不及格");
        }

        System.out.println("程序结束....");
        input.close();
    }

}

如果if结构或者else结构,只有一句话可以省略大括号,但是不建议省略。

import java.util.Scanner; //1.导入Scanner工具类

public class Demo10{

    public static void main(String [] args){
        Scanner input = new Scanner(System.in);//2.创建Scanner对象
        System.out.print("请输入小明的成绩:");
        int score = input.nextInt();//接收用户的输入

        if(score > 60)
            System.out.println("成绩及格");
        else 
            System.out.println("成绩不及格");
        

        System.out.println("程序结束....");
        input.close();
    }

}

如果if结构超过一句必须加大括号,如果else语句块超过一句可以不加;但是注意业务逻辑。

③多重if结构

需求: 如果大宝的期末考试成绩大于90分奖励iPad,大于80分奖励小米手机,大于70分奖励苹果手环,大于60没有奖励,低于60分没收零花钱,

分析: 以上需求不是两种情况,而是多种情况,所以可以使用多重if结构实现。

import java.util.Scanner; //1.导入Scanner工具类


public class Demo11{

    public static void main(String [] args){
        Scanner input = new Scanner(System.in);//2.创建Scanner对象
        System.out.print("请输入小明的成绩:");
        int score = input.nextInt();//接收用户的输入

        if(score > 90){
            System.out.println("奖励iPad平板电脑");
        } 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("没收所有的零花钱,参加银河补习班");
        }
           
    
        System.out.println("程序结束....");
        input.close();
    }

}

以上是范围判读,也可以是等值判断;

需求: 请输入你喜欢的汽车品牌,1.大众 2.红旗 3.宝马 4.奔驰 5.奇瑞 其他为止品牌。

import java.util.Scanner; //1.导入Scanner工具类

import javax.lang.model.util.ElementScanner6;


public class Demo12{

    public static void main(String [] args){
        Scanner input = new Scanner(System.in);//2.创建Scanner对象
        System.out.print("请输入你喜欢的汽车品牌:");
        int brand = input.nextInt();//接收用户的输入

        if(brand == 1){
            System.out.println("大众汽车");
        } else if(brand ==2){
            System.out.println("红旗汽车");
        } else if(brand ==3){
            System.out.println("宝马");
        }else if(brand ==4){
            System.out.println("奔驰");
        }else if(brand ==5){
            System.out.println("奇瑞汽车");
        }else{
            System.out.println("其他品牌");
        }
           
    
        System.out.println("程序结束....");
        input.close();
    }

}

④嵌套if结构

需求: 请输入你喜欢的汽车品牌,1.大众 2.红旗 ;

选择品牌之后,再选择汽车的型号 10 表示 : 帕萨特 11表示高尔夫

如果选择是红旗: 20 表示红旗h7 21表示红旗h9

import java.util.Scanner; //1.导入Scanner工具类

import javax.lang.model.util.ElementScanner6;


public class Demo13{

    public static void main(String [] args){
        Scanner input = new Scanner(System.in);//2.创建Scanner对象
        System.out.print("请输入你喜欢的汽车品牌:");
        int brand = input.nextInt();//接收用户的输入

        if(brand == 1){

            System.out.println("你选择的是大众汽车,请选择汽车型号:10 表示帕萨特 11表示高尔夫");
            int type  = input.nextInt();
            if(type == 10){
                System.out.println("恭喜你选择帕萨特");
            }else if(type == 11){
                System.out.println("高尔夫");
            }

        } else if(brand ==2){
            System.out.println("你选择的是红旗汽车,请选择型号:20 表示红旗h7  21表示红旗h9");
            int type  = input.nextInt();
            if(type == 20){
                System.out.println("恭喜你选择红旗h7");
            }else if(type == 21){
                System.out.println("恭喜你选择红旗h9");
            }
        }
           
    
        System.out.println("程序结束....");
        input.close();
    }

}

switch分支

switch也是用来实现分支结构的,多路分支。与多重if不同,主要是等值判断,switch不用于区间判断。老家的吊扇,开关有6个档位,开关上面有个单词: switch , 如果1档是一个转速, 如果是2档另一转速。自动档汽车1~6个档位,如果是1档位一个速度,2档位高一个速度等等。

语法:

int num = 3;//3档位
switch( 变量 ){
    case 常量1:
        业务代码块1
        break;
    case 常量2:
        业务代码块2
        break;      
    case 常量3:
        业务代码块3
        break;       
    case 常量4:
        业务代码块4
        break;
    default:
        默认业务
         break;
}

switch: 转换,开关的意思

case: 如果,案例

break: 打断

default: 默认、缺省

1、简单案例

需求:模拟点餐系统,星期一吃盖浇饭、星期二吃黄焖鸡、星期三吃米线、星期四吃拉面、星期五吃饺子默认吃红烧肉。周六周日改善生活。

import java.util.Scanner; //1.导入Scanner工具类
public class Demo14{

    public static void main(String [] args){
        Scanner input = new Scanner(System.in);//2.创建Scanner对象
        System.out.print("请输入星期几:");
        int day = input.nextInt();

        switch (day) {
            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("周末改善生活吃红烧肉...");
                break;
        }
           
    
        System.out.println("程序结束....");
        input.close();
    }

}
2、switch支持的数据类型

可以支持的数据类: byte short int char String enum(枚举类型)

import java.util.Scanner; //1.导入Scanner工具类
public class Demo15{

    public static void main(String [] args){
        Scanner input = new Scanner(System.in);//2.创建Scanner对象
        System.out.print("请输入星期几:");
        //int day = input.nextInt();
        //byte day = 1;
        //short  day  =1;
        //long day  = 1; //Demo15.java:11: 错误: 不兼容的类型: 从long转换到int可能会有损失
        //char day = 1;//可以编译
        String day = "1";
        switch (day) {
            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("周末改善生活吃红烧肉...");
                break;
        }
           
    
        System.out.println("程序结束....");
        input.close();
    }

}
3、多个case对应相同的业务

需求: 输入月份判断该月多少天。

import java.util.Scanner; //1.导入Scanner工具类

import javax.lang.model.util.ElementScanner6;
public class Demo16{

    public static void main(String [] args){
        Scanner input = new Scanner(System.in);//2.创建Scanner对象
        System.out.print("请输入年份:");
        int year  = input.nextInt();
        System.out.print("请输入月份:");
        int month = input.nextInt();

        int days  = 0;//存储天数
        switch(month){
            case 4:
            case 6:
            case 9:
            case 11:
                days = 30;
                break;
            case 2:
                if( (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)   ){
                    System.out.println(year + "是闰年");
                    days = 29;
                }else{
                    days = 28;
                }
                break;
            default:
                days = 31;
                break;

        }
        System.out.println(year + "年"+month + "有"+days+"天");
    
        System.out.println("程序结束....");
        input.close();
    }

}
4、省略break的问题

如果switch结构没有break语句,代码会依次向下执行,直到遇到break为止。

import java.util.Scanner; //1.导入Scanner工具类
public class Demo17{

    public static void main(String [] args){
        Scanner input = new Scanner(System.in);//2.创建Scanner对象
        System.out.print("请输入星期几:");
        int day = input.nextInt();

        switch (day) {
            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("周末改善生活吃红烧肉...");
                break;
        }
           
    
        System.out.println("程序结束....");
        input.close();
    }

}

输出:

D:\>java Demo17
请输入星期几:1
星期一吃盖浇饭
星期二吃黄焖鸡
星期三吃米线
星期四吃拉面
程序结束....
5、default语句的位置

分为两种情况,①如果default有break语句,没有影响;②有default没有break语句,会执行break为止。

import java.util.Scanner; //1.导入Scanner工具类
public class Demo18{

    public static void main(String [] args){
        Scanner input = new Scanner(System.in);//2.创建Scanner对象
        System.out.print("请输入星期几:");
        int day = input.nextInt();

        switch (day) {
            //switch放到首位
            default:
                System.out.println("周末改善生活吃红烧肉...");
                break;//注释到break测试一下。

            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;
        }
        System.out.println("程序结束....");
        input.close();
    }

}

如果有break,程序执行没有影响

D:\>java Demo18
请输入星期几:7
周末改善生活吃红烧肉...
程序结束....

如果没有break

D:\>java Demo18
请输入星期几:6
周末改善生活吃红烧肉...
星期一吃盖浇饭
程序结束....
6、switch和多重if的区别
  • 相同点: 都可以用于多条件判断
  • 不同点1: switch适用于等值判断、多重if适用于范围、区间判断
  • 不同点2: switch支持的数据类型包括 byte、short、int、char、String、enum;多重if没有限制

你可能感兴趣的:(JAVASE)