选择结构
顾名思义,有选择执行的控制结构,由条件来决定程序的执行顺序,即程序按照顺序结构执行到分支语句时,通过判断条件,来决定往那条分支继续执行。
举个例子,“如果今天是周一,晚饭吃米饭,周二吃大饼,周三吃面条.......”,很显然这种情况顺序结构是无法执行的,这时候就需要一些条件来进行判断,通过判断条件来判断的语句,我们成为选择语句或分支语句。
选择结构通常分为两类:
if语句:
if 语句是通过boolean表达式或者boolean值作为选择条件,可以理解成 “如果....,就........”
第一种结构:
if ( boolean 表达式 ) {
条件的执行体;
}
if后的{ } 表示了一个整体的代码块,如果 boolean 表达式的值为true,就执行这一代码块。
package Test;
/**
*
* @author FYDragon
*
*/
public class TestDemo {
public static void main(String[] args) {
int a = 2;
int b = 1;
if (a > b) {
System.out.println("a更大");
}
if (a < b) {
System.out.println("b 更大");
}
}
}
分析:a = 2,b = 1;条件判断中a > b成立,所以执行了第一句话。a < b不成立,所以第二句话不执行。
第二种结构:
if ( boolean 表达式 ) {
条件执行体A
}else{
条件执行体B
}
表示 boolean 表达式如果成立,进入条件执行体A,如果不成立,进入条件执行体B。
翻译过来就相当于:“如果...,就.....;否则就.......”
package Test;
/**
*
* @author FYDragon
*
*/
public class TestDemo {
public static void main(String[] args) {
int a = 100;
int b = 20;
if (a < b) {
System.out.println("a更大");
}else {
System.out.println("b 更大");
}
}
}
分析: 条件判断 a < b,a = 100、b = 20,明显不成立,所以执行 else(否则)后的执行体。
第三种结构:
if ( boolean 表达式 ) {
条件执行体A;
}else if( boolean 表达式 ){
条件执行体B;
}else{
条件执行体C;
}
这就相当于有了多种选择的条件,先判断第一个boolean表达式,如果不成立,判断第二个,以此类推。如果所有的boolean表达式均不成立,执行 else 的代码块。
现在做一下我们刚刚说的一周每天吃什么的问题。
package Test;
/**
*
* @author FYDragon
*
*/
public class TestDemo {
public static void main(String[] args) {
int weekday = 4; //初始化一个天数,假设是4
if (weekday == 1) { //== 表示对只进行判断
System.out.println("今晚吃米饭");
}else if(weekday == 2){
System.out.println("今晚吃大饼");
}else if(weekday == 3){
System.out.println("今晚吃面条");
}else if(weekday == 4){
System.out.println("今晚吃海鲜");
}else if(weekday == 5){
System.out.println("今晚吃烤肉");
}else if(weekday == 6){
System.out.println("今晚吃火锅");
}else{
//上述条件都为 false,执行此代码块
System.out.println("今晚喝粥");
}
}
}
分析:首先定义了weekday = 4,首先判断 weekday是否 等等于 1 ,不成立,可进行第二个判断,判断是否等等于 2 ,以此类推,最终判断出 weekday == 4;执行其中的语句。
使用 if 语句时应注意:
(1)不能在 if ( boolean 表达式) 后使用分号。
(2)不能在 else if ( boolean 表达式) 后使用分号。
(3)不能直接使用else if语句,必须先使用 if 语句
(4)第三种结构中的 else 语句,表示所有条件都不成立的情况下才执行。
switch语句:
语句结构:
switch ( 整型表达式 ) {
case A值 :
执行的语句;
break;
case B值 :
执行的语句;
break;
case C值 :执行的语句;
break;
。。。
default:
执行的语句;
}
注意:switch 后的括号中是一个整型表达式,不是判断语句,相当于的传一个值进如表达式中,然后将 这个值与 所有case 进行匹配,如果匹配成功,执行其中的代码。最后的default,是如果全部都匹配失败,执行此处的代码。break 表示跳出switch执结构体,后面我们会讲到。举个例子,判断这一天是周几
package Test;
/**
*
* @author FYDragon
*
*/
public class TestDemo {
public static void main(String[] args) {
int weekday = 4; //初始化一个天数,假设是4
switch (weekday) {
case 1:
System.out.println("今天是周一");
break;
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;
}
}
}
分析一下:首先将weekday传入switch结构体中,进行逐个匹配,第一个case不等于 4,第二个case不等于 4,第三个case不等于4,第四个匹配成功。执行其中的语句。
结果:
switch使用时需注意:
(1)switch语句适用于对多个整型值进行匹配判断,从而实现条件的分支语句
(2)和 if 语句不同是因为根据boolean表达式进行判断,而switch相当于是根于“表达式 == 数值”的boolean表达式进行判断,所以实质上,if 表达式更强大。
(3)switch语句选择的基本数据类型只有四种:byte、short、char、int ,没有long。
(4)case只是用来为switch选择一个执行代码的入口,如果一旦进入某个入口之后,后面的case实际上已经失去了判断意义。
(5)default表示所有的case值都不正确,一般放在switch的最后,也不需要使用break语句。
if 和 switch 的选择:
如果是对整数表达式判断等于多少,首选用switch。其他情况首选 if 语句。