Java中的switch控制语句
关于switch语句:
1、witch语句也属于选择结构,也是分支语句
2、switch语句的语法结构:
一个比较完整的switch语句应该这样编写
switch (int或String类型的字面值或变量){
case int或String类型的字面值或变量:
java语句;
java语句;
...
break;
case int或String类型的字面值或变量:
java语句;
java语句;
...
break;
case int或String类型的字面值或变量:
java语句;
java语句;
...
break;
default:
java语句;
...
}
3、switch语句的执行原理:
switch语句后面小括号当中的“数据”进行一一匹配,匹配成功的分支执行按照自上而下的顺序依次匹配。
4、匹配成功的分支执行,分支当中最后有“break;”语句的话,整个switch语句终止。
5、匹配成功的分支执行,分支当中没有“break;”语句的话,直接进入下一个分支执行(不进行匹配),这种现象被称为 case穿透 现象。【提供break;语句可以避免穿透】
case穿透:
int i=10;
switch(i){
case 1:
java语句;
case 2:
java语句;
case 3:
java语句;
break;//输入1,输出的结果是前三条java语句
case 4:
java语句;
System.out.println("Test Code!");
break;
}
6、所有分支都没有匹配成功,当有default的语句的话,会执行default分支当中的程序
7、switch后面和case后面只能是int或者String类型的数据,不能是探测其他类型。
- 当然byte,short,char也可以直接写到switch和case后面,因为它们可以进行自动类型转换。byte,short,char可以自动转换成int类型。
- JDK6的,switch和case后面只能探测int类型。
- JDK7之后包括7版本在内,引入新特性,switch关键字和case关键字后面可以探测 int 和string类型的数据。
8、case可以合并:
int i=10;
switch(i){
case 1:case 2:case 3: //输入1、2、3输出的结果相同
java语句;
break;
case 4:
java语句;
System.out.println("Test Code!");
break;
}
10、switch语句例子
public class SwitchTest01
{
public static void main(String[] args){
long a = 10L;
int b = a; //编译错误
long x = 10L;
switch(x){
} //编译报错,switch语句不能用long
解决编译错误:
long x = 10L;
switch((int)x){
}
byte b = 10;
switch(b){
} //编译通过
short s = 10;
switch(s){
} //编译通过
char c = 'A';
switch(c){
} //编译通过
char cc = 12;
switch(cc){
} //编译通过
//编译报错
//switch(ture){}
String username = "zhangsan";
switch(username){
}
}
}
11、switch确实可以探测String类型,这是Java7的新特性。
简单计算器系统实现:
public class SwitchTest02()
{
public static void main(String[] args){
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.println("欢迎使用简单计算器系统:");
System.out.print("请输入第一个数字:");
int num1 = s.nextInt();
System.out.print("请输入运算符");
String operator = s.next();
System.out.print("请输入第二个数字:");
int num2 = s.nextInt();
int result = 0;
switch(operator){
case "+" :
result = sum1 + sum2;
break;
case "-" :
result = sum1 - sum2;
break;
case "*" :
result = sum1 * sum2;
break;
case "/" :
result = sum1 / sum2;
break;
case "%" :
result = sum1 % sum2;
break;
default :
System.out.println("输入运算符号错误");
}
System.out.println("运算结果为:"+ num1 + operator + num2 + "=" + result );
}
}
假设系统给定考生成绩,判断该考生的成绩等级:
- 有效成绩范围:【0-100】
- 考试成绩可以有小数
- 考试成绩和等级之间的对照关系:
【90-100】 A
【80-90】 B
【70-80】 C
【60-70】 D
【0-60】 E- 以上需求必须采用switch语句完成,不能采用if
窍门:(int)(成绩 / 10)
public class SwitchTest03()
{
public static void main(String[] args){
double score = 数字:
int grade = (int)(score/10);
switch(grade){
case 9:case 10:
System.out.println("A");
break;
case 8:
System.out.println("B");
case 7:
System.out.println("C");
case 6:
System.out.println("D");
default:
System.out.println("E");
}
}
}