分支结构:
一般来说程序的结构包含有三种:顺序结构、选择结构、循环结构。
顺序结构是指程序从上到下逐行地执行,中间没有任何判断和跳转。
分支结构是指据条件,选择性地执行某段代码。有if…else和switch两种分支语句。
if语句
一个 if 语句包含一个布尔表达式和一条或多条语句。
if(布尔表达式){
//如果布尔表达式为true将执行的语句
}
如果布尔表达式的值为 true,则执行 if 语句中的代码块,下面举个例子:
public class Test {
public static void main(String args[]){
int x = 5;
if( x < 10 ){ // 5<10,布尔表达式为true,执行if语句中的代码块
System.out.print("这是 if 语句");
}
}
}
if...else语句
if 语句后面可以跟 else 语句,当 if 语句的布尔表达式值为 false 时,else 语句块会被执行。
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
我们把上面的例子改成以下if...else语句示例:
public class Test {
public static void main(String args[]){
int x = 5;
if( x > 10 ){ // 布尔表达式为false,执行else语句块
System.out.print("这是 if 语句");
}else{
System.out.print("这是 else 语句");
}
}
}
if...else if...else 语句
if 语句后面可以跟 elseif…else 语句,这种语句可以检测到多种可能的情况。
使用 if,else if,else 语句的时候,需要注意下面几点:
1)if 语句至多有 1 个 else 语句,else 语句在所有的 elseif 语句之后。
2)if 语句可以有若干个 elseif 语句,它们必须在 else 语句之前。
3)一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
我们继续把上面的例子改成以下if...elseif...else语句示例:
public class Test {
public static void main(String args[]){
int x = 5;
if( x == 1 ){ // false
System.out.print("Value of X is 1");
}else if( x == 3 ){ // false
System.out.print("Value of X is 3");
}else if( x == 5 ){ // true, 这个else if语句块里的语句将被执行
System.out.print("Value of X is 5");
}else{
System.out.print("这是 else 语句");
}
}
}
嵌套的 if…else 语句
使用嵌套的 if…else 语句是合法的。也就是说你可以在另一个 if 或者 elseif 语句中使用 if 或者 elseif 语句。
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
//......
}else{
//如果布尔表达式 2、3的值都不为true执行代码
}
}
switch语句
switch 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
当判断固定个数的值的时候,可以使用if,也可以使用switch。但是建议使用switch,效率相对较高。
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//可以有任意数量的case语句
default : //可选
//语句
}
工作原理:用小括号中的变量的值依次和case后面的值进行对比,和哪个case后面的值相同了就执行哪个case后面的语句,如果没有相同的则执行default后面的语句。
我们先来看一个简单的例子:
public class Test {
public static void main(String args[]){
//char grade = args[0].charAt(0);
char grade = 'B';
switch(grade){
case 'A' :
System.out.println("优秀");
break;
case 'B' : // true,将打印“及格”,遇到break跳出swithch语句
System.out.println("及格");
break;
case 'C' :
System.out.println("及格");
break;
default :
System.out.println("未知等级");
}
}
}
switch 语句注意事项:
1)switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串类型了,同时 case 标签必须为字符串常量或字面量。
2)switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
3)case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量;所有case语句中的值应是不同的。
4)当变量的值与case语句的值相等时,那么case语句之后的语句开始执行,直到break语句出现才会跳出switch语句。
5)当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不是必须要包含 break 语句的。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
6)default 在没有 case 语句的值和变量值相等的时候执行。
7)switch中语句没有顺序,均可以出现在任何位置。也就是说case和default的位置都是可以任意排放的。无论 default 位置在前在后,都是先判断 各个case,最后进 default。
在写witch语句时,break是很重要的,而case/default 的次序是次要的。
public class Test {
public static void main(String args[]){
//char grade = args[0].charAt(0);
char grade = 'D';
switch(grade){
default : // 'D'与所有case值都不匹配,进入default语句
System.out.println("未知等级"); // 执行
case 'A' :
System.out.println("优秀"); // 执行,由default语句块里没有break;
break;
case 'B' : // true,将打印“及格”,遇到break跳出swithch语句
System.out.println("及格");
break;
case 'C' :
System.out.println("及格");
break;
}
}
}
由上可知,当switch语句里,所有的case语句都不满足条件时,则执行default语句。下面我们来分析一下default放在不同位置时的情况:
default在switch开头:
若所有case语句都不满足条件,则执行default语句,并执行default语句之后的case语句,直到break或结束。
default在switch中间:(同上)
若所有case语句都不满足条件,则执行default语句,并执行default语句之后的case语句,直到break或结束。
default在switch末尾:
若所有case语句都不满足条件,则执行default语句,结束;若有case满足,则执行case语句直到遇到break或switch语句结束,所以default在最后一行时break可以省略不写(但是不建议省略,以求严谨)。