流程控制语句--选择结构--switch语句

选择结构(switch语句)

switch语句格式:

switch(表达式) {

case 常量1:

语句体1;

break;

case 常量2:

语句体2;

break;

case 常量n:
语句体n;
break;

default:

语句体n+1;

break;

}

 

解释分析结构:

  • switch表达式的结果可以是哪些数据类型?(面试题)

表达式的结果可以是:byte,short,int,char。
在JDK1.5以后可以是枚举类型。
在JDK1.7以后可以是String。

 

名词解释:

  • case: 后面跟的是要和表达式的结果进行比较的值(常量),如果说匹配到了对应的case的值,

那么就执行相对应的语句体,而且这个语句的部分可以是一条语句,也可以是多条语句。

  • break: 表示中断的意思,结束的意思,可以结束switch语句。
  • default: 表示默认的意思,当表达式的结果与所有的case的常量都不匹配的时候,

最后才执行。(与default处在switch语句体的位置无关)

 

 

 

执行流程:

  • 计算表达式的值。
  • 拿着这个计算好的值与case相对应的值(常量)按照顺序从上往下依次进行比较,如果有相同的值,就开始执行此位置的case中的语句体内容。
  • 当语句体的内容执行完毕后,会紧接执行break语句,执行break语句就代表着咱们这个switch选择结构的结束。(跳出switch选择)
  • 当第二步从上往下去匹配case的值的时候,如果没有匹配到相应的值,就会执行default语句中语句体内容,最后跳出switch语句。

 

 注意事项:

  • case后面的值不能有重复的。(重复会报错)
  • default语句可以进行省略,一般情况下,不建议删除。
  • case 后面紧跟着的只能是常量,或者常量之间的运算,不能是变量。
  • break语句可以省略,代码也不会报错,一般情况下,不建议省略,
    如果你省略了,结果可能不是你想要的结果。
    当匹配到break语句省略的那个case的时候,首先会执行对应的语句体,然后从匹配
    到的case一直运行到有break语句为止。
  • default语句可以放在任意地方吗?
    可以,因为我们的switch语句执行流程是严格按照先在所有的case中进行匹配,当所有
    的case都不匹配的时候,最后再去执行default语句,这和你default语句写的顺序没有关系。

 

switch语句与if语句嵌套使用:

程序示例

import java.util.Scanner;
public class SwitchIfDemo1 {
public static void main(String[] args) {

 

//创建键盘录入对象
Scanner sc = new Scanner(System.in);

 

//可乐 3, 旺仔牛奶 5, 红牛 6, 农夫山泉 2, 脉动 4


//键盘录入数据表示身上有多少钱
System.out.println("请输入您身上带了多少钱:");
int money = sc.nextInt();

//switch语句与if语句嵌套使用

if(money>=2 & money<100){
System.out.println("欢迎光临!!!");

switch (money){
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;
default:
System.out.println("没有你想要的饮料");
break;
}
}else if(0<money & money<2){
System.out.println("您带的钱太少了,下次带多一点");
}else if(money >=100){
System.out.println("随便挑");
}else {
System.out.println("你是个穷鬼,下次再来吧");
}

}
}

 

例题

模拟做单项选择题,根据你的选择,给出对应的答案。(表达式是字符的情况)

import java.util.Scanner;
public class SwitchTest1 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);

System.out.println("题目:你学的怎么样?");
System.out.println("请输入你选择的选项(A/B/C/D)其中一个");
String s = sc.next();

switch (s){
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;
default:
System.out.println("您输入的选项有误");
break;
}

}
}

 

看程序写结果1

 

public class SwitchTest3 {
public static void main(String[] args) {
int x = 2;
int y = 3;
switch (x) {
default:
y++; 
break;
case 3:
y++;
case 4:
y++;
}
System.out.println("y=" + y);

}
}

请问输出的y=??

答案:y=4

程序运行步骤(原因)

1.首先输入的x的值与case后面的值做比较,没有符合的。

2.运行default的语句体y++,然后运行break。跳出switch语句。

 

看程序写结果2

 

public class SwitchTest4 {
public static void main(String[] args) {
int x = 2;
int y = 3;
switch(x){
default:
y++;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y);

}
}

 

请问输出的y=??

答案:y=6

程序运行步骤(原因)

1.首先输入的x的值与case后面的值做比较,没有符合的。

2.运行default的语句体y++,然后因为没有break。所以没有跳出switch语句。

但是程序穿透运行,按照顺序结构继续执行下面的两个y++。
posted @ 2021-11-27 19:10  赤兔胭脂小吕布  阅读(436)  评论(0编辑  收藏  举报