Java基础之:分支(选择)控制语句
首先介绍一下程序流程控制,分别是顺序控制,分支控制,循环控制。
分支控制(if-else)
分支控制可以分为三种(也可以是四种)分别是:单分支,双分支,多分支,(分支嵌套)。
单分支:
if(条件表达式){ 执行代码块;(可以有多条语句) }
说明:
-
当条件满足时,执行{}中的代码块。条件不满足则跳过{},直接执行后面的程序语句。
-
可以不使用{},用缩进来表示,但仅限于只有一条语句的情况下。
简单案例:
小黄和小范准备结婚,如果钱足够50w就结婚。
import java.util.Scanner; public class Ifelse { public static void main(String[] args){ Scanner input = new Scanner(System.in);//声明Scanner对象 System.out.println("请输入现有资金(W):"); int money = input.nextInt();//接收键盘输入 //1.单分支 if(money >= 50){ System.out.printf("现有资金%dW,结婚花费50W,可以结婚!\n",money); System.out.printf("结婚后剩余资金%dW\n",money - 50); } } }
双分支:
基本语法:
if(条件表达式){ 执行代码块1;(可以有多条语句) }else{ 执行代码块2;(可以有多条语句) }
说明:
-
双分支结构,满足条件运行代码块1,若不满足条件运行代码块2。
-
与单分支相同,同样可以不使用{}。
简单案例:
小黄和小范准备结婚,如果钱足够50w就结婚,否则就不结婚。
import java.util.Scanner; public class Ifelse { public static void main(String[] args){ Scanner input = new Scanner(System.in);//声明Scanner对象 System.out.println("请输入现有资金(W):"); int money = input.nextInt();//接收键盘输入 // 2.双分支 if(money >= 50){ System.out.printf("现有资金%dW,结婚花费50W,可以结婚!\n",money); System.out.printf("结婚后剩余资金%dW\n",money - 50); }else{ System.out.printf("现有资金%dW,结婚花费50W,还需%dW\n",money,50-money); } } }
运行结果:
多分支:
基本语法:
if(条件表达式1){ 执行代码块1;(可以有多条语句) }else if(条件表达式2){ 执行代码块2;(可以有多条语句) } .....(可以有多个else if语句) else{ 执行代码块3;(可以有多条语句) }
说明:
-
首先判断条件1是否成立,若不成立向下依次判断条件2是否成立。一旦有某个条件,则进入代码块执行。若全部条件都不成立,则执行else中的代码块。
-
同样可以不使用{},用缩进来表示,但一定要注意用缩进只能有一条语句。
简单案例:
小黄和小范准备结婚,如果钱足够50w就结婚,如果钱够30w就先结婚然后努力赚钱买车,否则不结婚。
import java.util.Scanner; public class Ifelse { public static void main(String[] args){ Scanner input = new Scanner(System.in);//声明Scanner对象 System.out.println("请输入现有资金(W):"); int money = input.nextInt();//接收键盘输入 // 3.多分支 if(money >= 50){ System.out.printf("现有资金%dW,结婚花费50W,可以结婚!\n",money); System.out.printf("结婚后剩余资金%dW\n",money - 50); }else if(money >= 30){ System.out.printf("现有资金%dW,结婚至少花费30W,可以结婚!\n",money); System.out.printf("结婚后剩余资金%dW,距离买车还需%dW。",money-30,20-(money-30)); }else{ System.out.printf("现有资金%dW,结婚至少花费30W,还需%dW\n",money,30-money); } } }
运行结果:
分支嵌套:
基本语法:
if(条件表达式1){ 执行代码块1;(可以有多条语句) }else if(条件表达式2){ if(条件表达式2.1){ 执行代码块2.1;(可以有多条语句) }else{ 执行代码块2.2;(可以有多条语句) } } .....(可以有多个else if语句) else{ 执行代码块3;(可以有多条语句) }
说明:
若满足条件表达式2,则需要再次进行判断是否满足条件表达式2.1,若满足执行代码块2.1,若不足执行代码块2.2.
简单案例:
小黄和小范准备结婚,如果钱足够50w就结婚,如果钱够30w就先结婚然后根据剩余资金情况选择购买新车还是二手车。剩余超过10W买新车,不足10买二手车
import java.util.Scanner; public class Ifelse { public static void main(String[] args){ Scanner input = new Scanner(System.in);//声明Scanner对象 System.out.println("请输入现有资金(W):"); int money = input.nextInt();//接收键盘输入 //4.分支嵌套 if(money >= 50){ System.out.printf("现有资金%dW,结婚花费50W,可以结婚!\n",money); System.out.printf("结婚后剩余资金%dW\n",money - 50); }else if(money >= 30){ System.out.printf("现有资金%dW,结婚至少花费30W,可以结婚!\n",money); if(money - 30 >= 10){ System.out.printf("婚后现有资金%dW,可以购买新车!\n",money-30); }else{ System.out.printf("婚后现有资金%dW,只能购买二手车。\n",money-30); } }else{ System.out.printf("现有资金%dW,结婚至少花费30W,还需%dW\n",money,30-money); } } }
运行结果:
关于 if 的其他注意事项
boolean b = true;
if(b = false){ //注意这里是"="而不是"==",运行过程是 1.b <== false 2.判断if(b)
System.out.println("a");
}else if(b){
System.out.println("b"); //若上面为"==",则输出b
}else if(!b){
System.out.println("c");
}else{
System.out.println("d");
}
这里结果输出:C
选择控制(Switch)
基本语法:
switch(表达式){ case 常量1: 语句块1; [break;] case 常量2: 语句块2; [break;] ..... default: default语句块; [break;] }
注意事项:
-
case中常量的数据类型一定和表达式的数据类型一致,或是可以自动转换相互比较的数据类型
-
-
如果没有写break,程序会顺序执行到switch结尾,直到seitch结束,或遇到break(”穿透“特性)
说明:
-
若表达式的值为常量1,则执行语句块1,若不是则继续向下判断,直到最后所有都不满足则执行default语句块。
-
break可以选择是否添加进代码里,作用是退出switch语句,直接转到{}后的程序语句。
-
default这条判断语句也是可以被忽略的,若忽略则当所有条件不满足时什么都不执行直接退出switch。
简单案例1:
int a = 2; switch(a){ case 1: System.out.println("1"); break; case 2: System.out.println("2"); break;//若不添加break;则会一直判断到最后,具体看下一个案例 default: System.out.println("3"); break; }
运行结果:2
简单案例2:根据用于指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季。
int month = 1; switch(month){ case 3: case 4: case 5: System.out.println("春"); break; case 6: case 7: case 8: System.out.println("夏"); break; case 9: case 10: case 11: System.out.println("秋"); break; case 12: case 1: case 2: System.out.println("冬"); break; default: System.out.println("输入错误"); }
运行结果为:冬
说明:
这里用到了switch的一个特性"穿透",即若在case中不添加break语句则会一直穿透下去。
简单案例3:对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
(注:输入的成绩不能大于100 [0-100])
double sroce = 80.3; //一定要注意switch可以判断的变量类型 if(sroce>0 && sroce<=100){ switch((int)sroce/60){ //充分利用整除的原理,若大于60则返回1,小于则返回0 case 1: System.out.println("合格"); break; case 2: System.out.println("不合格"); break; //这里就可以不需要用default语句,因为外面已经有了一个if语句进行输入参数的条件判断 } }else{ System.out.println("输入错误"); }
运行结果:合格
if-else与switch的区别
- 如果需要判断的是具体数据(数值),且数据类型为byte,short,char,int,String,enum(枚举),建议使用switch,虽然if-else也可以。
- 如果需要判断的返回值为Boolean类型数据或区间判断,则建议使用if-else。