public class Test_1 {
public static void main(String[] args){
byte a = 21;
switch(a){
case 21 : System.out.println(" 21 "); break;
case 300 : System.out.println(" 300 "); break;
}
}
}
这个程序段是正确的吗?肯定是有错误的(因为byte的数据类型的范围是-128~127)。虽然在程序的语法是合法的,但是第二个case语句后的值是300,它的大小超过了byte的范围,所以是错误的。再就是case后的值不能出现重复。因此在使用中要注意。
还有在使用switch···case···中最容易忽视的错误就是忘记在每个case后忘记写上break;语句(我犯了几次这样的错误了)。如果不加就会发生case穿透,但是case穿透并不是一无是处,
程序段:
class Test_2 {
public static void main(String[] args){
byte a = 2;
switch(a){
case 1 : System.out.println(" x ");
case 2 : System.out.println(" y ");
case 3 : System.out.println(" z ");
default : System.out.println(" default ");
}
}
}
输出结果为:
x
y
z
default
所以连default都会执行,因此以后的代码一定不要忘记加上break ;语句,切记!!!。
我所要表达的虽然很简单的问题,但是,有时候好多人不会注意;
case穿透好处:
题目:
(1)根据工龄(整数)给员工涨工资(整数),工龄和基本工资通过键盘录入
(2)涨工资的条件如下:
[10-15) +5000
[5-10) +2500
[3~5) +1000
[1~3) +500
[0~1) +200
(3)如果用户输入的工龄为10,基本工资为3000,程序运行后打印格式"您目前工作了10年,基本工资为 3000元, 应涨工资 5000元,涨后工资 8000元"
程序段:
class Test_3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入工龄:");
int age = sc.nextInt();
System.out.println("请输入基本工资:");
int money = sc.nextInt();
switch (age) {
case 0 :
System.out.println("您目前工作了"+ age +"年,基本工资为:" + money + "元, 应涨工资 200元,涨后工资" +(money + 200) + "元");
break;
case 1 :
case 2 :
System.out.println("您目前工作了"+ age +"年,基本工资为:" + money + "元, 应涨工资 500元,涨后工资" +(money + 500) + "元");
break;
case 3 :
case 4 :
System.out.println("您目前工作了"+ age +"年,基本工资为:" + money + "元, 应涨工资 1000元,涨后工资" +(money + 1000) + "元");
break;
case 5 :
case 6 :
case 7 :
case 8 :
case 9 :
System.out.println("您目前工作了"+ age +"年,基本工资为:" + money + "元, 应涨工资 2500元,涨后工资" +(money + 2500) + "元");
break;
case 10 :
case 11 :
case 12 :
case 13 :
case 14 :
System.out.println("您目前工作了"+ age +"年,基本工资为:" + money + "元, 应涨工资 5000元,涨后工资" +(money + 5000) + "元");
break;
default :
System.out.println("请输入正确的工龄和工资");