控制结构是管理代码执行流程的基础。主要包括顺序控制、分支控制和循环控制。
一、顺序控制
顺序控制是最基本的控制结构,程序按照代码的书写顺序逐行执行。
public class SequentialControl {
public static void main(String[] args) {
int a = 5;
int b = 10;
int sum = a + b;
System.out.println("Sum: " + sum); // 顺序执行
}
}
这段代码会先执行
int a = 5;
然后执行
int b = 10;
再执行
int sum = a + b;
最后执行
System.out.println("Sum: " + sum);
这就是顺序控制。
二、分支控制
1、单分支
单分支一般使用 if 语句。
语法结构:
if (condition) {
// 当条件为 true 时执行的代码
}
如果 condition 为 true 则执行代码块中的内容,如果 condition 为 false 则不执行代码块中的内容,直接执行后面的内容。
当代码块中的代码只有一个语句的话,可以不加 {} 。
例如:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入你的成绩");
int score = input.nextInt();
if(score >= 60) {
System.out.println("真厉害,及格了");
}
System.out.println("...");
}
}
当输入 66 时,score >= 60 结果为 true,所以代码块的代码得以执行。
当输入 50 时,score >= 60 结果为 false ,所以代码块的代码不会执行。
2、双分支
if-else
语句用于在条件表达式为true
时执行一段代码,为false
时执行另一段代码。
if (condition) {
// 当条件为 true 时执行的代码
} else {
// 当条件为 false 时执行的代码
}
当 condition 为 true 时,会执行 if 后面的代码块,当 condition 为 false 时,会执行 else 后面的代码块。
例如:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入你的成绩");
int score = input.nextInt();
if(score >= 60) {
System.out.println("真厉害,及格了");
} else {
System.out.println("别灰心,下次加油");
}
}
}
当我们输入 100 时,score >= 60 的结果为 true ,所以会执行 if 后的语句,所以运行结果为:
当我们输入 50 时,score >= 60 的结果为 false ,所以会执行 else 后的语句,所以运行结果为:
3、多分支
1)if-else if-else
else if
语句用于在多重条件下执行不同的代码块。它可以有多个else if
分支,最后可以有一个else
分支作为所有条件都不满足时的默认执行代码。
if (condition1) {
// 当 condition1 为 true 时执行的代码
} else if (condition2) {
// 当 condition1 为 false 且 condition2 为 true 时执行的代码
} else if (condition3) {
// 当 condition1 和 condition2 为 false 且 condition3 为 true 时执行的代码
} else {
// 当所有条件都为 false 时执行的代码
}
对于双分支和多分支,只要前面有一个代码块被执行了,后面的就不会再执行了,在前面的一个代码块执行后,就会跳到这个分支的最后,执行后面的其他代码了。
例如:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入你的成绩");
int score = input.nextInt();
if(score < 60) {
System.out.println("你的成绩不及格");
} else if(score >= 60 && score < 80) {
System.out.println("你的成绩为良等级");
} else if(score >= 80 && score < 90) {
System.out.println("你的成绩为优等级");
} else {
System.out.println("你的成绩为优加等级");
}
}
}
当我们输入 59 时,score < 60 为 true ,所以运行结果为:
当我们输入 66 时,条件 1 为 false,score >= 60 && score < 80 为 true ,所以运行结果为:
当我们输入 88 时,条件 1 和 2 都为 false,score >= 80 && score < 90 为 true ,所以运行结果为:
当我们输入 100 时,前面三个条件都是 false,所以执行 else 后的代码块,所以运行结果为:
2)switch
switch
语句用于当一个变量符合多个可能值之一时,选择性地执行代码块。switch
语句中的每个分支由一个case
标签标识,最后可以有一个default
分支来处理所有未匹配的情况。
switch (expression) {
case constantValue1:
// 当 expression == constantValue1 时执行的代码
break;
case constantValue2:
// 当 expression == constantValue2 时执行的代码
break;
// 你可以有任意数量的 case 语句
...
default:
// 当 expression 不等于任何已定义的 case 值时执行的代码
break;
}
expression
:是一个整型、字符串或枚举类型的表达式。表达式的值会被逐一与每个case
的值进行比较。直到找到匹配的case
,或者执行到default
。case
:每个case
后面跟随一个值和一个冒号,表示一个可能的匹配值。break
:用于终止当前case
块的执行,并跳出switch
语句。如果省略break
,将会继续执行下一个case
块中的代码(即使下一个case
条件不成立),这种行为称为"fall-through"。default
:这是一个可选的部分,当expression
不匹配任何case
值时执行。这部分通常放在所有case
之后。
例如:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入");
int day = input.nextInt();
switch(day) {
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;
default :
System.out.println("输入错误");
break;
}
}
}
当我们输入 2 时,与第二个 case 匹配,会执行第二个代码块,然后 break 退出 switch 语句。所以运行结果:
switch 补充
switch 后圆括号中的表达式应当与 case 语句后的常量类型相匹配,或者可以自动类型转换。
如果使用不兼容的类型,是没法通过编译的。例如下面这个就是错的:
switch(29) {
case "Hello":
System.out.println("Hello World");
break;
case 1:
System.out.println("1");
break;
default :
System.out.println("Error");
break;
}
在编译时会报错:
对于大于等于 60 分的打印合格,小于 60 分的打印不合格,要求使用 switch 语句。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入成绩");
int score = input.nextInt();
if(score >= 0 && score <= 100) {
switch(score / 60) {
case 0:
System.out.println("不合格");
break;
case 1:
System.out.println("合格");
break;
}
} else {
System.out.println("输入范围错误");
}
}
}
当我们输入 66 ,运行结果:
嵌套分支语句
上面所说的分支语句都是可以相互嵌套的。
例如:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入你的成绩(0~100)");
int score = input.nextInt();
if(score >= 0 && score <=100) {
if(score < 60) {
System.out.println("你的成绩不及格");
} else if(score >= 60 && score < 80) {
System.out.println("你的成绩为良等级");
} else if(score >= 80 && score < 90) {
System.out.println("你的成绩为优等级");
} else {
System.out.println("你的成绩为优加等级");
}
} else {
System.out.println("成绩不在正常范围");
}
}
}
当我们输入 222 时,score >= 0 && score <=100 结果为 false ,所以执行外层循环的 else 后的代码块,所以运行结果为:
三、if else 分支和 switch 分支选择
当判断一个范围或者是 boolean 类型的时候,使用 if else ;当使用可以有限个列举的值的时候使用 switch 。