这几天在看Java相关语法基础,和C++在语法上还有一些通用性,看到选择结构这块时有些迷糊,特此纪录下来!
switch语句的格式:
switch (表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
..........
default :
语句体n+1;
break;
}
语句功能:可以从一系列代码中选出一段去执行
在书《Java编程思想》一书中给出的switch格式如下):
switch(integral-selector){
case integral-value1 : statement ; break;
case integral-value2 : statement ; break;
case integral-value3 : statement ; break;
case integral-value4 : statement ; break;
//...
default : statement ;
}
位于格式最末尾的default可以不加break;
其中(integral-slector)整数选择因子是一个能够产生整数值的表达式,switch能将这个表达式的结果与每个integral-value(整数值)比较,若发现相同的字符,就执行对应的语句,若发现没有相符的,就执行default(默认语句)。每个case均以一个break结尾,这样可使执行流程跳转至switch主体的末尾。这是构建switch语句的一种传统方式,但break是可选的。若省略break,会继续执行case后面的语句,直到遇到一个break。
在本书中,书中提到switch语句要求使用一个选择因子,并且必须是int或char那样的整数值(这里存在疑问),若将一个字符串或者浮点数作为选择因子使用,那么它们在switch语句那里是不会工作的。
但是下边的这段代码是以字符串作为选择因子的,代码也可以成功执行。(例子来源于黑马程序员Java基础班上课例子)
class Dem0_Switch {
public static void main(String[] args) {
String name = "张三";
String gender = "女士";
switch (gender ) {
case "男士":
System.out.println(name + "是一位" + gender + "吃饭睡觉打LOL");
break;
case "女士":
System.out.println(name + "是一位" + gender + "逛街购物美容");
break;
default:
System.out.println("人妖");
break;
}
}
}
书中提到:“Java SE5的新特性enum枚举,它可以帮助我们减弱这种限制,因为enum可以和switch协调工作。
验证了一下,的确可以,switch语句基本数据类型可接受byte、short、char、int可提升为int类型的(JDK1.7)
而在JDK(1.5)引用数据类型可接受枚举、字符串(String)。下面贴一个自己练习字符串的例子。
import java.util.Scanner;
class Demo6_Switch_practice {
public static void main(String[] args) {
System.out.println("请从梅西和C罗中选择一名你最喜爱的球员:1 代表C罗,2 代表梅西, 其他数字,代表你两个都爱");
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
String player1 = "C罗";
String player2 = "梅西";
String player;
if ( x== 1) {
player = player1;
}else if ( x==2) {
player = player2;
}else {
player = "both";
}
switch (player) {
case "梅西":
System.out.println(player2 + "是巴萨的当家球星!,现在西甲成了一枝独秀了!" );
break;
case "C罗":
System.out.println(player1 + "现在成了尤文的当家球星了,和皇马没有半毛钱关系了!");
break;
default :
System.out.println("绝代双骄,不分伯仲");
}
}
}
注意到:选择因子是字符串时,case " 选择字符串" :这里要加双引号,来表示字符串,整数则没必要。