1.分支结构 - if语句
流程控制语句 - 顺序结构
作用: 通过一些语句,来控制程序(代码)的执行流程
流程控制语句分为: 顺序结构, 分支结构(if,switch), 循环结构(for,while,do…while)
顺序结构: 是java的默认执行流程,从上到下,从左到右依次执行
if语句的三种格式:
格式1:
if(关系表达式){语句体};
执行流程: 1).首先计算关系表达式的值
2).如果表达式的值为true就执行语句体
3).如果表达式的值为false就不执行语句体
4).继续执行后面的内容
格式2:
if(关系表达式){
语句体1
}
else{
语句体2
};
执行流程: 1).计算关系表达式的值
2).如果表达式的值为true就执行语句体1
3).如果表达式的值为false就执行语句体2
4).执行后续的内容
格式3:
if(判断条件1){
语句体1
} else if(判断条件2){
语句体2
} ......
else{
语句体n+1
};
执行流程: 1).首先计算判断条件1的值
2).如果值为true就执行语句体1,如果值为false就计算判断条件2的值
3).如果值为true就执行语句体2,如果值为false就计算判断条件3的值
4).......
5).如果没有任何判断条件为true,就执行语句体n+1
eg:
1.商场根据消费金额不同,折扣也不同,折扣的规则如下(P代表消费的总金额)
P >= 2000 7折
1000 <= P < 2000 8折
500 <= P < 1000 9.5折
P < 500 不打折
2.要求根据输入的消费金额,输出对应的折扣和折扣前后的金额
import java.util.Scanner;
public class A {
public static void main(String[] args) {
//提示用户输入金额
System.out.println("请输入金额: ");
//创建键盘录入对象并接收
double P = new Scanner(System.in).nextInt();
//定义打折后的金额变量
double discount = 0.0;
//健壮性判断
if (P<0){
System.out.println("您输入的金额有误!请重新输入...");
} else{
if (P>=0&&P<500){
discount = P;
} else if (P>=500&&P<1000){
discount = P*0.95;
}else if (P>=1000&&P<2000){
discount = P*0.9;
}else {
discount = P*0.8;
}
}
//打印结果
System.out.println("打折后的金额: " + discount);
}
}
2.switch语句
格式:
switch(表达式){
case 1:
语句体1;
break;
case 2:
语句体2;
break;
....
case n:
语句体n;
break;
default:
语句体n+1;
break;
}
格式说明:
表达式: (将要匹配的值) 取值为byte , short , int , char , JDK7以后可以是String
case: 后面跟的是要和表达式比较的值(被匹配的值)
break: 表示中断,结束的意思,用来结束switch语句
default: 表示所有情况都不匹配的时候,就会执行该内容,和if语句的else比较相似
执行流程:
1).首先计算表达式的值
2).依次和case后面的值比较,如果有对应的值,就会执行相对应的语句体,在执行过程中,遇到break就会结束循环
3).如果case后面的值和表达式的值都不匹配的话,就执行default里的语句体,然后结束循环
注意: case后面的值不能重复,而且是常量
eg: 减肥计划
//减肥计划
//导包
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//提示用户输入星期数
System.out.println("请输入星期数: ");
//接收数据
int choice = sc.nextInt();
//switch语句
switch (choice){
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;
case 7:
System.out.println("玩游戏");
break;
}
}
}
如果case中的语句体结尾不加break的话,就会造成case的穿透现象
case的穿透现象: 当case进行穿透时,后面的case就不会具有匹配效果,内部的语句遇到break才会结束,或者直到循环结束
应用场景: 当发现switch语句中,多个case中的语句体重复,就可以使用case的穿透现象来优化代码
eg :减肥计划改进: 假若,周一到周三的计划都是跑步,代码实现如下
//减肥计划
//导包
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//提示用户输入星期数
System.out.println("请输入星期数: ");
//接收数据
int choice = sc.nextInt();
//switch语句
switch (choice){
case 1:
case 2:
case 3:
System.out.println("跑步");
break;
case 4:
System.out.println("竞走");
break;
case 5:
System.out.println("睡觉");
break;
case 6:
System.out.println("散步");
break;
case 7:
System.out.println("玩游戏");
break;
}
}
}