程序流程控制:控制程序的执行顺序。
程序有哪些执行顺序?
顺序、分支和循环。
分支结构:
if、switch
循环:
for、while、do-while
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
if分支:
根据条件(真和假)来决定执行某段代码。
说明:单分支、双分支、多分支。
package cn.ensource.branch;
import java.util.Scanner;
public class IfDemo1 {
public static void main(String[] args) {
// 目标:需要同学们掌握If分支的三种形式的用法和执行流程
// 需求:测量用户体温、发现体温高于37度就报警
double t = 38.9;
if (t > 37) {
System.out.println("这个人温度异常!");
}
// 需求:发红包、你的钱包余额是99元,现在要发出90元。
// 如果钱够,触发发红包的动作,如果钱不够,则提示余额不足:
double money = 99;
if (money >= 90) {
System.out.println("发红包成功了!");
}else {
System.out.println("余额不足!");
}
// 需求3: 某个公司有一个绩效系统,根据员工的打分输出对应的绩效级别。
// [0-60] D [60-80] C [80-90] B [90-100] A
Scanner sc = new Scanner(System.in);
System.out.println("请输入员工积分:");
int score = sc.nextInt();
if (score >= 0 && score < 60) {
System.out.println("D");
}else if(score >= 60 && score < 80) {
System.out.println("C");
}else if(score >= 80 && score < 90) {
System.out.println("B");
}else if(score >= 90 && score <= 100) {
System.out.println("A");
}else {
System.out.println("您输入的积分有问题!");
}
}
}
如果if语句的{}中只有一行代码的情况,{}可以省略不写(但不推荐省略)。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("start");
Scanner sc = new Scanner(System.in);
System.out.println("Please input a number(1-7):");
int week = sc.nextInt();
if(week == 1) {
System.out.println("Monday");
} else if(week == 2) {
System.out.println("Tuesday");
} else if(week == 3) {
System.out.println("Wednesday");
} else if(week == 4) {
System.out.println("Thursday");
} else if(week == 5) {
System.out.println("Friday");
} else if (week == 6) {
System.out.println("Saturday");
} else {
System.out.println("Sunday");
}
System.out.println("End");
}
}
switch分支:
是通过比较值来决定执行哪条分支。
switch分支的执行流程:
1)先执行表达式的值,再拿着这个值去与case后的值进行匹配;
2)与哪个case后面的值匹配值为true,就执行哪个case块的代码,遇到break,就跳出switch分支。
3)如果全部case后的值与之匹配都是false,则执行default块的代码。
案例:
package cn.ensource.branch;
import java.util.Scanner;
public class SwitchDemo2 {
public static void main(String[] args) {
//switch语句
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期信息(示例:周一):");
String week = sc.nextLine();
switch (week) {
case "周一":
System.out.println("埋头苦干,解决bug。");
break;
case "周二":
System.out.println("请大牛程序员帮忙。");
break;
case "周三":
System.out.println("今晚啤酒、龙虾、小烧烤。");
break;
case "周四":
System.out.println("主动帮助新来的女程序员解决bug。");
break;
case "周五":
System.out.println("今晚吃鸡。");
break;
case "周六":
System.out.println("与王婆介绍的小芳相亲。");
break;
case "周日":
System.out.println("郁郁寡欢,准备上班。");
break;
default:
System.out.println("您输入的星期信息不对!");
}
}
}
if、switch的比较,以及各自适合的应用场景?
if语句功能上远远强于switch。swith语句能搞定的事情,if都可以搞定。
如果当前的条件是区间的话,应该使用if分支结构。
当条件是与一个一个值比较的时候,switch分支是更合适的,格式良好、性能更好、代码优雅。
快速定位某个语句。
switch语句使用时的注意事项:
1)表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持Double、float、long。
long的值很大,分支很大,就没有意义了。
double类型在运算的时候,可能是不精确的。底层的运算机制。
2)case给出的值不允许重复,且只能是字面量,不能是变量。
3)正常使用switch语句的时候,不要忘记写break,否则会出现穿透现象。
忘记写break语句,程序继续往下执行。
Switch穿透性在某些情况下可以简化代码。
当存在多个case分支的代码相同的时候,可以把相同的代码放到一个case块中,其他的case块都通过穿透性透到该case执行代码即可,这样可以简化代码。
这样,很明显,代码简化了。