在程序中,程序运行的流程控制决定程序是如何执行的。
顺序控制
介绍: 程序从上到下的逐行的执行,中间没有任何判断和跳转。
使用:java中定义变量时,采用合法的前向引用。如:
public class Test{
int num1 = 12;
int num2 = num1 + 2;
System.out.println(num2);
// 错误写法
int num2 = num1 + 2;
int num1 = 12;
}
分支控制(if, else,switch)
介绍:让程序有选择的执行,分支控制有三种
1)单分支
if (条件表达式){
执行代码块;(可以有多条语句)
}
当条件表达式为true时,就会执行{}的代码。如果为false时,就不执行。
特别注意:如果{}中只有一条语句时,可以不用{},建议写上{}。
// if 的快速入门
import java.util.Scanner;
public class if01{
public static void main(String[] args) {
// 输入人的年龄,大于18,则输出:成年人。
// 思路分析:
// 1、接收输入的年龄
// 2、把年龄保存到变量
// 3、使用if判断
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = myScanner.nextInt();
if (age > 18){
System.out.println("年龄大于18岁,是成年人了");
}
System.out.println("程序继续执行");
}
}
2)双分支
if (条件表达式){
执行代码块1;
}
else{
执行代码块2;
}
当条件表达式成立时,及执行代码块1,否则执行代码块2。如果执行的代码块只有一条语句,则{}可以省略,不推荐使用。
// if 的快速入门
import java.util.Scanner;
public class if01{
public static void main(String[] args) {
// 输入人的年龄,大于18,则输出:成年人。
// 思路分析:
// 1、接收输入的年龄
// 2、把年龄保存到变量
// 3、使用if,else判断
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = myScanner.nextInt();
if (age > 18){
System.out.println("年龄大于18岁,是成年人了");
} else { // 双分支
System.out.println("年龄小于18岁,未成年");
}
System.out.println("程序继续执行");
}
}
测试题
public class IfExercise01{
public static void main(String[] args) {
// 声明两个double类型的变量并赋值
// 判断当第一个数大于10.0,且第二个数小于20.0时,打印两数之和。
double num1 = 13;
double num2 = 12;
if (num1 >10 && num2 < 20){
System.out.println("输出结果" + (num1 + num2));
}
}
}
public class IfExercise01{
public static void main(String[] args) {
// 声明两个int类型的变量并赋值,判断两者之和是否能被3又能被5整除,打印提示信息。
int num1 = 12;
int num2 = 18;
int sum = num1 + num2;
if (sum % 3 ==0 && sum % 5==0){
System.out.println("两数之和可以整除3和5");
}
}
}
3)多分支
if (条件表达式1){
执行代码块1;
} else if (条件表达式2){
执行代码块2;
}
......
else{
执行代码块n;
}
特别说明:
- 多分支,可以没有else。
// if 的快速入门
import java.util.Scanner;
public class if01{
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入信用分:");
// 如果输入的是一个字符串该怎么办呢,这里使用异常处理进行解决。
int score = myScanner.nextInt();
if (score <= 100 && score >0){
if (score ==100){
System.out.println("信用极好");
} else if (80<score && score <=99) {
System.out.println("信用优秀!!!");
} else if (60 <= score && score <= 80) {
System.out.println("信用一般");
} else {
System.out.println("信用不及格");
}
} else {
System.out.println("信用分需要在1-100之间,请重新输入");
}
}
}
switch分支结构
switch(表达式){
case 常量1:
语句块1;
break;
case 常量2:
语句块2;
break;
case 常量n:
语句块n;
break;
default:
default语句块;
}
1、witch关键字,表示switch分支
2、表达式对应一个值,可以是返回的值
3、case 常量1; 当表达式的值等于常量1时,就执行语句块1
4、break: 表示退出switch
5、如果和case常量1匹配就执行语句块1,如果不匹配则继续匹配case 常量2
6、如果一个都没有匹配上,则执行default。
switch注意事项和细节讨论
1、表达式中的数据类型,应该和case中的常量类型一致,或者是可以自动转成可以相互比较的类型。
2、switch中的表达式返回值必须是:byte、short、int、char、enum、String 注意没有double
通过1和2两个规则,决定了在case中byte、short、int、char为一类【自动提升为int类型】,string自己一类,enum之后再说。
3、case 中的值必须是常量,不能是变量。
4、default子句是可选的,也可以不写,当不写时,如果前面的case都不匹配时,则输出为空。
5、break语句用来在执行完case分支后使程序跳出switch语句块,如果没有break,程序会顺序执行到switch结尾。
练习题
int num = 12;
switch (num){
case 3:
case 4:
case 5:
System.out.println("春季");
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
System.out.println("秋季");
break;
case 12:
case 1:
case 2:
System.out.println("冬季");
System.out.println("冬季");
break;
}
注意:switch中的default和break的作用范围。
switch和if的比较
1、如果判断的具体数值不多,而且符合 byte、short、int、char、enum、String这6种类型。虽然两个语句都可以使用,建议使用switch语句
2、其他情况,对区间的判断,对结果为bioolean类型判断,使用if,if的使用范围更广。