Switch选择结构

switch多选择结构

多选择结构还有一个实现方式就是switch case语句

switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支

switch语句中的变量类型可以是:

1.byte、short、int或者char

2.从javaSE7开始,switch支持字符串String类型了

3.同时case标签必须为字符串常量或字面量。

语法格式如下:

switch(expression){

case value:

//语句

break;

case value:

//语句

break;

//你可以有任意数量的case语句

default://可选

//语句

}

switch代码里面char的引用格式如下:

package com.rgf.structure;

import java.util.Scanner;

public class F {
    public static void main(String[] args) {
        //case穿透,switch匹配一个具体的值
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入您的成绩级别:");
        char score = scanner.next().charAt(0);//scanner引用字符的方式
        switch (score){
            case 'A':
                System.out.println("优秀");
                break;//可选
            case 'B':
                System.out.println("良好");
                break;//可选
            case 'C':
                System.out.println("及格");
                break;//可选
            case 'D':
                System.out.println("不及格");
                break;//可选
            default:
                System.out.println("未知等级");
                break;


        }
    }
}

运行界面如下:

 switch代码里面string的引用格式如下:

package com.rgf.structure;

import java.util.Scanner;

public class G {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您的名字:");
        String name = scanner.next();
        //JDK的新特性,表达式结果可以是字符串!!!
        //字符的本质还是数字。

        //反编译  Java文件编译后生成class文件(字节码文件),
        // 字节码文件我们看不懂,为了能看懂,我们需要反编译,
        //反编译成我们的java程序或一些东西(工具例如IDEA)
        switch (name) {
            case "ypl":
                System.out.println("ypl");
                break;
            case "rgf":
                System.out.println("rgf");
                break;
            default:
                System.out.println("名字不匹配");
                break;
        }
    }
}

运行界面如下:

switch用法如下所示:

package com.hy;

import   java.lang.Math;

import java.util.Scanner;
import java.lang.String;

/*
说明:
1.根据switch表达式中的值,依次匹配各个case中的常量,一旦匹配成功,则进入相应case结构中,调用其执行语句
当调用完执行语句后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾结束为止。
2.break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构。
3.switch结构中的表达式,只能是如下的6种数据类型之一:
byte、short、char、int、枚举类型(JDK5.0)、String类型(JDK7.0)
4.case之后只能声明常量,不能声明范围
5.break关键字是可选的。
6.default:相当于if-else结构中的else,default结构是可选的,而且位置是灵活的。
 */
public class Array8_ {
    public static void main(String[] args) {
     int a=5;
     switch (a){
         default:
             System.out.println("other");
             
         case 0:
             System.out.println("zero");
             break;
         case 1:
             System.out.println("one");
             break;
         case 2:
             System.out.println("two");
             break;
         case 3:
             System.out.println("three");
             break;

     }
    }
}


运行之后如下所示:

 我们将代码修改如下:

package com.hy;

import   java.lang.Math;

import java.util.Scanner;
import java.lang.String;

/*
说明:
1.根据switch表达式中的值,依次匹配各个case中的常量,一旦匹配成功,则进入相应case结构中,调用其执行语句
当调用完执行语句后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾结束为止。
2.break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构。
3.switch结构中的表达式,只能是如下的6种数据类型之一:
byte、short、char、int、枚举类型(JDK5.0)、String类型(JDK7.0)
4.case之后只能声明常量,不能声明范围
5.break关键字是可选的。
6.default:相当于if-else结构中的else,default结构是可选的,而且位置是灵活的。
 */
public class Array8_ {
    public static void main(String[] args) {
     int a=5;
     switch (a){
         case 0:
             System.out.println("zero");
             break;
         case 1:
             System.out.println("one");
             break;
         case 2:
             System.out.println("two");
             break;
         case 3:
             System.out.println("three");
             break;
         default:
             System.out.println("other");


     }
    }
}


运行之后如下所示:

switch测试题如下所示:

1.使用switch把小写类型的char型转为大写,只转换a,b,c,d,e,其他的输出“other"

package com.hy;

import   java.lang.Math;

import java.util.Scanner;
import java.lang.String;

public class Array8_ {
    public static void main(String[] args) {
   //1.使用switch把小写类型的char型转为大写,只转换a,b,c,d,e,其他的输出“other"
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要转换的字母:");
        String word = scanner.next();
        char c = word.charAt(0);
        switch (c){
            case 'a':
                System.out.println('A');
                break;
            case 'b':
                System.out.println('B');
                break;
            case 'c':
                System.out.println('C');
                break;
            case 'd':
                System.out.println('D');
                break;
            case 'e':
                System.out.println('E');
                break;
            default:
                System.out.println("other");
     }
    }
}


运行之后如下所示:

2.对学生成绩大于60分的,输出”合格“,低于60分的,输出”不合格“。

package com.hy;

import   java.lang.Math;

import java.util.Scanner;
import java.lang.String;

public class Array8_ {
    public static void main(String[] args) {
        //2.对学生成绩大于60分的,输出”合格“,低于60分的,输出”不合格“。
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生成绩:");
        int grade = scanner.nextInt();
        switch (grade/10){
            case 0:
                System.out.println("不及格");
                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;
            case 6:
                System.out.println("及格");
                break;
            case 7:
                System.out.println("及格");
                break;
            case 8:
                System.out.println("及格");
                break;
            case 9:
                System.out.println("及格");
                break;
            case 10:
                System.out.println("及格");
                break;


        }


    }
}


运行之后如下所示:

 我们相同的可以删掉,优化如下:

package com.hy;

import   java.lang.Math;

import java.util.Scanner;
import java.lang.String;

public class Array8_ {
    public static void main(String[] args) {
        //2.对学生成绩大于60分的,输出”合格“,低于60分的,输出”不合格“。
//说明:如果switch-case 结构中的多个case的执行语句相同,则可以考虑进行合并。
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生成绩:");
        int grade = scanner.nextInt();
        switch (grade/10){
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("不及格");
                break;
            case 6:
            case 7:
            case 8:
            case 9:
            case 10:
                System.out.println("及格");
                break;


        }


    }
}


 运行之后如下所示:

3.根据用于指定月份,打印该月份所属的季节。

3,4,5 春季   6,7,8夏季  9,10,11秋季  12,1,2冬季。

package com.ypl.data_;

import java.sql.Date;
import java.time.Instant;
import java.util.Scanner;

public class Instant_ {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入月份:");
        int i = scanner.nextInt();
        switch (i){
            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;

        }
    }
}

我们运行之后如下所示:

4.编写程序:从键盘上输入2019年的“month"和”day",要求通过程序输出输入的日期为2019年的第几天。

package com.ypl.data_;
import java.util.Scanner;




/*.编写程序:从键盘上输入2023年的”month"和“day",要求通过程序输出输入的日期为2023年的第几天.
         */

public class LocalDate1_ {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入2023年的month:");
        int month = scanner.nextInt();
        System.out.println("请输入2023年的day:");
        int day = scanner.nextInt();
        //定义一个变量来保存总天数
        int sumDays=0;
        if(month==1){
            sumDays=day;
            System.out.println("是第"+sumDays+"天");
        } else if (month==2) {
            sumDays=31+day;
            System.out.println("是第"+sumDays+"天");
        } else if (month==3) {
            sumDays=31+28+day;
            System.out.println("是第"+sumDays+"天");
        }else if (month==4){
            sumDays=31+28+31+day;
            System.out.println("是第"+sumDays+"天");
        } else if (month==5) {
            sumDays=31+28+30+30+day;
            System.out.println("是第"+sumDays+"天");
        }else if(month==6){
            sumDays=31+28+30+30+31+day;
            System.out.println("是第"+sumDays+"天");
        } else if (month==7) {
            sumDays=31+28+30+30+31+30+day;
            System.out.println("是第"+sumDays+"天");
        } else if (month==8) {
            sumDays=31+28+30+30+31+30+31+day;
            System.out.println("是第"+sumDays+"天");
        } else if (month==9) {
            sumDays=31+28+30+30+31+30+31+31+day;
            System.out.println("是第"+sumDays+"天");
        } else if (month==10) {
            sumDays=31+28+30+30+31+30+31+31+30+day;
            System.out.println("是第"+sumDays+"天");
        } else if (month==11) {
            sumDays=31+28+30+30+31+30+31+31+30+31+day;
            System.out.println("是第"+sumDays+"天");
        } else if (month==12) {
            sumDays=31+28+30+30+31+30+31+31+30+31+31+day ;
            System.out.println("是第"+sumDays+"天");
        }

    }
}

运行之后如下所示:

我们发现代码里面重复的比较多,出现了冗余。我们来进行优化如下所示:

我们采用switch-case方法来进行如下所示:

package com.ypl.exercise;


import java.util.Scanner;

public class Homework01 {
    public static void main(String[] args) {
        /*.编写程序:从键盘上输入2023年的”month"和“day",要求通过程序输出输入的日期为2023年的第几天 
         */
        //更优的解决方案
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入月份:");
        int month = scanner.nextInt();
        System.out.println("请输入天:");
        int day = scanner.nextInt();
        //定义一个变量来保存总天数
        int sumDays=0;
        switch (month){
            case 1:
                sumDays=day;
                break;
            case 2:
                sumDays=31+day;
                break;
            case 3:
                sumDays=31+28+day;
                break;
            case 4:
                sumDays=31+28+31+day;
                break;
            case 5:
                 sumDays=31+28+30+30+day;
                 break;
            case 6:
                 sumDays=31+28+30+30+31+day;
                 break;
            case 7:
                 sumDays=31+28+30+30+31+30+day;
                 break;
            case 8:
                 sumDays=31+28+30+30+31+30+31+day;
                 break;
            case 9:
                 sumDays=31+28+30+30+31+30+31+31+day;
                 break;
            case 10:
                 sumDays=31+28+30+30+31+30+31+31+30+day;
                 break;
            case 11:
                 sumDays=31+28+30+30+31+30+31+31+30+31+day;
                 break;
            case 12:
                 sumDays=31+28+30+30+31+30+31+31+30+31+31+day;
                 break;
        }
        System.out.println("2023年的第"+sumDays+"天");

    }
}



 我们运行之后如下所示:

我们发现上述方式和if-else同样都很麻烦,我们继续进行优化。尽可能的减少冗余。

package com.ypl.exercise;


import java.util.Scanner;

public class Homework01 {
    public static void main(String[] args) {
        /*.编写程序:从键盘上输入2023年的”month"和“day",要求通过程序输出输入的日期为2023年的第几天
        说明:break在switch-case当中是可选的。
         */
        //更优的解决方案
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入月份:");
        int month = scanner.nextInt();
        System.out.println("请输入天:");
        int day = scanner.nextInt();
        //定义一个变量来保存总天数
        int sumDays=0;
        switch (month){
            case 12:
                sumDays+=30;
            case 11:
                sumDays+=31;
            case 10:
                sumDays+=30;
            case 9:
                sumDays+=31;
            case 8:
                 sumDays+=31;
            case 7:
                 sumDays+=30;
            case 6:
                 sumDays+=31;//我们输入6月,从上往下将5,4,3,2,1月的都加上之后,最后再将当月的月数加上即可。
            case 5:
                 sumDays+=30;
            case 4:
                 sumDays+=31;
            case 3:
                 sumDays+=28;
            case 2:
                 sumDays+=31;
            case 1:
                 sumDays+=day;;

        }
        System.out.println("2023年"+month+"月"+day+"日是当年的第"+sumDays+"天");

    }
}



运行之后如下所示:

 

5.从键盘分别输入年、月、日,判断这一天是当年的第几天

注:判断一年是否是闰年的标准:

(1)可以被4整除,但不可被100整除或(2)可以被400整除。  

package com.ypl.exercise;

import java.util.Scanner;

public class W {
    public static void main(String[] args) {
    /*
    5.从键盘分别输入年、月、日,判断这一天是当年的第几天
     注:判断一年是否是闰年的标准:
    (1)可以被4整除,但不可被100整除或
    (2)可以被400整除。
     */
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year = scanner.nextInt();
        System.out.println("请输入月份:");
        int month = scanner.nextInt();
        System.out.println("请输入日:");
        int day = scanner.nextInt();
        //定义一个变量来保存总天数
        int sumDays=0;
        switch (month){
            case 12:
                sumDays+=30;
            case 11:
                sumDays+=31;
            case 10:
                sumDays+=30;
            case 9:
                sumDays+=31;
            case 8:
                sumDays+=31;
            case 7:
                sumDays+=30;
            case 6:
                sumDays+=31;//我们输入6月,从上往下将5,4,3,2,1月的都加上之后,最后再将当月的月数加上即可。
            case 5:
                sumDays+=30;
            case 4:
                sumDays+=31;
            case 3:
                //判断year是否是闰年
                if((year%4 == 0  && year%100 != 0)||(year%400==0)) {
                    sumDays += 29;
                }else {
                     sumDays += 28;
                }

            case 2:
                sumDays+=31;
            case 1:
                sumDays+=day;;

        }
        System.out.println(year+"年"+month+"月"+day+"日是当年的第"+sumDays+"天");

    }
}

运行之后如下所示:(闰年)
  

我们继续运行之后如下所示:

 switch-case与if-else的转换:

(1)凡是可以使用switch-case的结构,都可以转换为if-else,反之,不成立。

(2)当我们写分支结构时,当发现既可以使用switch-case时,(同时,switch中表达式的取值情况不太多),又可以使用if-else时,我们优先选择使用switch-case.。原因:switch-case执行效率稍高!

1.使用switch语句改写下列if语句:

package com.ypl.exercise;

public class A {
    public static void main(String[] args) {
        int a = 3;
        int x = 100;
        if (a == 1)
            x += 5;
        else if (a == 2) {
            x += 10;
        } else if (a == 3) {
            x += 16;
        } else {
            x += 34;
        }
    }
}

改写后如下所示:

package com.ypl.exercise;

public class A {
    public static void main(String[] args) {
        int a = 3;
        int x = 100;
        switch (a){
            case 1:
                x+=5;
                break;
            case 2:
                x+=10;
                break;
            case 3:
                x+=16;
                break;
            default:
                x+=34;
        }
        System.out.println(x);
    }
}

 运行之后如下所示:
 

2.编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的值输出其对应的成绩等级:

score>=90  等级:A

70<=score<90  等级:B

60<=score<70  等级:C

score<60  等级:D

使用if-else的代码如下所示:

package com.ypl.exercise;

import java.util.Scanner;

public class C {
    public static void main(String[] args) {
        /*
        .编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的值输出其对应的成绩等级:
               score>=90 等级:A
               70<=score<90 等级:B
               60<=score<70 等级:C
               score<60 等级:D
          使用if-else的代码如下所示:
         */
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生成绩:");
        int score = scanner.nextInt();
        if(score>=90){
            System.out.println("等级:A");
        } else if (70<=score&& score<90) {
            System.out.println("等级:B");
        } else if (60<=score && score<70) {
            System.out.println("等级:C");
        }else {
            System.out.println("等级D");
        }
    }
}

运行之后如下所示:

 

 我们使用switch如下所示:

package com.ypl.exercise;

import java.util.Scanner;

public class C {
    public static void main(String[] args) {
        /*
        .编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的值输出其对应的成绩等级:
               score>=90 等级:A
               70<=score<90 等级:B
               60<=score<70 等级:C
               score<60 等级:D
          使用if-else的代码如下所示:
         */
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生成绩:");
        int score = scanner.nextInt();
        switch (score/10){
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
                if(score<60){
                    System.out.println("等级D");
                }else if(score==60) {
                    System.out.println("等级C");
                }
                break;
            case 7:
                if(score<70){
                    System.out.println("等级C");
                } else if (score==70) {
                    System.out.println("等级B");
                }
                break;
            case 8:
            case 9:
                if(score<90){
                    System.out.println("等级B");
                } else if (score==90) {
                    System.out.println("等级A");
                }
                break;
            case 10:
                System.out.println("等级A");
                break;
        }
    }
}

运行之后如下所示:
 

 反编译的流程如下:

1.点击IDEA里面的Project Structure

2.进去之后,我们点击Project,同时复制最下面的文件路径进行搜索. 

3.复制到文件搜索位置进行搜索 

4.我们点击之后发现该class文件。 

5.将class文件打开之后发现如下所示,无法看懂。

看不懂该文件,所以我们需要进行反编译。

我们直接复制该文件到structure包下的时候,我们发现:

 

发现无法直接拷贝,这个时候,我们可以通过直接搜索文件夹进行拖拽即可,如下所示:

点击包名,点击右键,找到open in,点击explorer.

 找到如下目录,将class文件进行拖拽到里面即可

 

然后我们打开IDEA,发现在该包下面有这个class文件了,打开即可。

即反编译成功: 

其中名字里面加了个name.hashCode,每个对象都有一个自己的hashCode,它是通过一些特定的算法生成的,而我们的名字,还有中文都有一个自己对应的哈希值,也可以直接把该class文件扔到IDEA里面。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一直再追梦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值