首先介绍一下程序流程控制,分别是顺序控制,分支控制,循环控制。
分支控制(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,可以结婚!
",money);
System.out.printf("结婚后剩余资金%dW
",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,可以结婚!
",money);
System.out.printf("结婚后剩余资金%dW
",money - 50);
}else{
System.out.printf("现有资金%dW,结婚花费50W,还需%dW
",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,可以结婚!
",money);
System.out.printf("结婚后剩余资金%dW
",money - 50);
}else if(money >= 30){
System.out.printf("现有资金%dW,结婚至少花费30W,可以结婚!
",money);
System.out.printf("结婚后剩余资金%dW,距离买车还需%dW。",money-30,20-(money-30));
}else{
System.out.printf("现有资金%dW,结婚至少花费30W,还需%dW
",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,可以结婚!
",money);
System.out.printf("结婚后剩余资金%dW
",money - 50);
}else if(money >= 30){
System.out.printf("现有资金%dW,结婚至少花费30W,可以结婚!
",money);
if(money - 30 >= 10){
System.out.printf("婚后现有资金%dW,可以购买新车!
",money-30);
}else{
System.out.printf("婚后现有资金%dW,只能购买二手车。
",money-30);
}
}else{
System.out.printf("现有资金%dW,结婚至少花费30W,还需%dW
",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。