程序流程控制
关于程序控制的关键字:
程序控制关键字 | |||
---|---|---|---|
break | do | while | for |
continue | switch | case | default |
return | instanceof | if | else |
程序运行时的一个顺序,程序的结构分为:顺序结构、选择结构和循环结构。
- 顺序结构是指按照代码的书写顺序执行。
- 选择结构是指根据条件来选择执行对应代码。
- 循环结构是指在一定的条件下重复执行某段代码。
1.continue、break、和return的区别是什么?
在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。但是,有时候可能需要 在循环的过程中,当发生了某种条件之后 ,提前终止循环,这就需要用到下面几个关键词:
continue
:指跳出当前的这一次循环,继续下一次循环。break
:指跳出整个循环体,继续执行循环下面的语句。
return 用于跳出所在方法,结束该方法的运行。return 一般有两种用法:
return;
:直接使用 return 结束方法执行,用于没有返回值函数的方法return value;
:return 一个特定值,用于有返回值函数的方法
2.选择结构
java 中选择结构有两种,分别是 if 和 switch
2.1 if
if 控制语句有三种不同形式,单分支、双分支、多分支结构。
2.2 单分支
结构如下:
if (表达式){
//代码块
}
if是关键字
表达式的结果必须是boolean类型,值是true或false
如果满足条件执行`{}`里的代码块,如果只有一句代码,可以省略`{}`但不推荐。
2.3 双分支
结构如下:
if(表达式){
//代码块1
}else{
//代码块2
}
如果表达式结果是true,执行代码块1
如果表达式结果是false,执行代码块2
2.4 多分支
结构如下:
if(表达式1){
//代码块1
}else if(表达式2){
//代码块2
}else{
//代码块3
}
2.5 嵌套if
结构如下:
if(表达式1){
if(表达式2){
//代码块1
}else{
//代码块2
}
}else{
//代码块3
}
如果表达式1返回false,执行`else`中的代码块3
如果表达式1返回true,判断表达式2返回结果,如果表达式2返回true执行代码块1,返回false执行代码块2
2.6 switch
- switch 语句(开关语句),用于实现多分支选择结构。
- 结构如下:
switch(表达式){
case 常量1:
//语句1
break;
case 常量2:
//语句2
break;
.....
default:
//语句3
break;
}
switch中有switch、case、break、default等关键字
- case用于从上到下依次与表达式进行匹配
- break用终止switch执行
- default用于当前switch中所有的case都没有匹配上表达式时执行。default语句可写可不写。
- switch后的表达式支持
int 、 byte 、 short 、 char 、 Enum
(枚举) 类型,在 jdk1.7(jdk7.0) 之后又增加了对String
类型的支持 - switch 支持多值匹配
注意:switch语句一定不要忘了写 break;
2.7 switch 新特性
- 箭头表达式 从Java12开始,switch语句的语法更简洁,保证只有一种路径会被执行,并且不需要break语句。
case语句简写成:
case 常量 -> {表达式;}
如果表达式只有一句,{}可以省略。
- case 可以匹配多个值:把相同case放一起,最后一个case写逻辑即可,使用逗号来分开多个值。
例如:
/*
* 编写一个程序,根据用户输入的月份(1 到 12),输出该月份所属的季节。
* 假设春季是 3到 5 月,夏季是 6 到 8 月,秋季是 9 到 11 月,冬季是 12、1 和 2月。
* 如果输入的月份超出了范围,输出"输入错误"。
* */
public void demo2() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入月份:");
int mouth = scanner.nextInt();
switch (mouth) {
case 3, 4, 5 -> System.out.println(mouth + "月份是春季");
case 6, 7, 8 -> System.out.println(mouth + "月份是夏季");
case 9, 10, 11 -> System.out.println(mouth + "月份是秋季");
case 12, 1, 2 -> System.out.println(mouth + "月份是冬季");
default -> System.out.println("输入错误!");
}
}
- yield:就是如果需要复杂的语句,也是可以写多个语句,放到{……}里面,然后使用yield返回一个值作为switch语句的返回值。
3. 案例1——计算机程序
/* 编写一个简单的计算器程序,要求用户输入两个数和操作符(+、-、*、/),然后根据操
* 作符进行相应的运算,并输出结果。如果输入的运算符不是有效的运算符,则输出"无效的运算符"。
* */
public void demo1() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入第一个数:");
int num1 = scanner.nextInt();
System.out.println("请输入操作符:");
String m = scanner.next();
System.out.println("请输入第二个数:");
int num2 = scanner.nextInt();
int result = switch (m) {
case "+" -> {
int res = num1 + num2;
yield res;
}
case "-" -> {
int res = num1 - num2;
yield res;
}
case "*" -> {
int res = num1 * num2;
yield res;
}
case "/" -> {
int res = num1 / num2;
yield res;
}
default -> 0;
};
System.out.printf("%d" + m + "%d=%d", num1, num2, result);
}
注意:上述代码switch中的default要有,以及switch语句结束之后的分号。
4. 案例2——根据员工的工龄来计算年终奖金
// 编写一个程序,根据员工的工龄来计算年终奖金。奖金计算规则如下:
// 工龄小于等于5年,奖金为工资的5%
// 工龄大于5年且小于等于10年,奖金为工资的10%
// 工龄大于10年,奖金为工资的15%
// (工资和工龄输入)
public void demo4() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入员工的工龄:");
int age = scanner.nextInt();
System.out.println("请输入员工的工资:");
int money = scanner.nextInt();
// 初始年终奖
int bouns = 100 ;
if (age <= 5) {
bouns += (int) (money * 0.05);
} else if (age <= 10) {
bouns += money * 0.1;
}else {
bouns += money * 0.15;
}
System.out.printf("工龄位%d的奖金为%d",age,bouns);
}