Java学习笔记03:流程控制语句
一、本章学习目标
本章主要学习 Java 中的流程控制语句。
程序默认是从上到下顺序执行的,但在实际开发中,经常需要根据条件选择不同的执行路径,或者让某段代码重复执行多次。
学完本章后,需要掌握以下内容:
- 理解程序的三种基本结构;
- 掌握 if 分支语句;
- 掌握 switch 分支语句;
- 掌握 for 循环;
- 掌握 while 循环;
- 掌握 do-while 循环;
- 掌握 break、continue、return 的作用;
- 能够使用流程控制语句完成简单案例。
二、程序的三种基本结构
Java 程序中常见的流程结构包括三种:
text
1. 顺序结构
2. 分支结构
3. 循环结构
1. 顺序结构
顺序结构是最简单的程序结构。
程序按照代码书写顺序,从上到下依次执行。
示例:
java
public class SequenceDemo {
public static void main(String[] args) {
System.out.println("第一步:打开冰箱");
System.out.println("第二步:把大象放进去");
System.out.println("第三步:关上冰箱");
}
}
运行结果:
text
第一步:打开冰箱
第二步:把大象放进去
第三步:关上冰箱
2. 分支结构
分支结构用于根据不同条件执行不同代码。
常见分支语句有:
text
if
if-else
if-else if-else
switch
3. 循环结构
循环结构用于重复执行某段代码。
常见循环语句有:
text
for
while
do-while
三、if 语句
1. if 语句基本格式
java
if (条件表达式) {
条件成立时执行的代码;
}
执行流程:
text
如果条件表达式为 true,则执行大括号中的代码;
如果条件表达式为 false,则跳过大括号中的代码。
2. if 语句示例
java
public class IfDemo01 {
public static void main(String[] args) {
int age = 20;
if (age >= 18) {
System.out.println("已经成年");
}
}
}
运行结果:
text
已经成年
3. if 语句注意事项
1)条件表达式结果必须是 boolean 类型
正确写法:
java
int age = 20;
if (age >= 18) {
System.out.println("成年");
}
错误写法:
java
int age = 20;
if (age) {
System.out.println("成年");
}
Java 中不能直接把整数当作条件。
2)如果 if 后面只有一条语句,可以省略大括号
java
public class IfDemo02 {
public static void main(String[] args) {
int age = 20;
if (age >= 18)
System.out.println("成年");
}
}
虽然可以省略,但不推荐。
推荐写法:
java
public class IfDemo03 {
public static void main(String[] args) {
int age = 20;
if (age >= 18) {
System.out.println("成年");
}
}
}
原因:
text
加上大括号,代码结构更清晰,也能减少出错。
四、if-else 语句
1. if-else 基本格式
java
if (条件表达式) {
条件成立时执行的代码;
} else {
条件不成立时执行的代码;
}
2. 示例:判断是否成年
java
public class IfElseDemo01 {
public static void main(String[] args) {
int age = 16;
if (age >= 18) {
System.out.println("已经成年");
} else {
System.out.println("未成年");
}
}
}
运行结果:
text
未成年
3. 示例:判断奇偶数
java
import java.util.Scanner;
public class IfElseDemo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num = scanner.nextInt();
if (num % 2 == 0) {
System.out.println(num + " 是偶数");
} else {
System.out.println(num + " 是奇数");
}
}
}
运行示例:
text
请输入一个整数:
9
9 是奇数
五、if-else if-else 语句
1. 基本格式
java
if (条件表达式1) {
条件1成立时执行的代码;
} else if (条件表达式2) {
条件2成立时执行的代码;
} else if (条件表达式3) {
条件3成立时执行的代码;
} else {
以上条件都不成立时执行的代码;
}
执行流程:
text
从上到下依次判断条件;
哪个条件先成立,就执行对应代码;
执行完后,整个 if-else if-else 结构结束;
如果所有条件都不成立,则执行 else 中的代码。
2. 示例:成绩等级判断
需求:
text
90分及以上:优秀
80分到89分:良好
70分到79分:中等
60分到69分:及格
60分以下:不及格
代码实现:
java
import java.util.Scanner;
public class ScoreLevelDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩:");
int score = scanner.nextInt();
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 70) {
System.out.println("中等");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
}
}
运行示例:
text
请输入成绩:
85
良好
3. 加入数据合法性判断
上面的代码还有一个问题:
text
如果输入 120 或 -10,也会参与判断。
更合理的写法:
java
import java.util.Scanner;
public class ScoreLevelDemo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩:");
int score = scanner.nextInt();
if (score < 0 || score > 100) {
System.out.println("成绩输入不合法");
} else if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 70) {
System.out.println("中等");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
}
}
六、嵌套 if 语句
1. 什么是嵌套 if?
嵌套 if 指的是在 if 语句内部再写 if 语句。
格式:
java
if (条件1) {
if (条件2) {
条件1和条件2都成立时执行;
}
}
2. 示例:判断是否可以参加比赛
需求:
text
年龄大于等于18岁;
成绩大于等于80分;
两个条件都满足,才可以参加比赛。
代码实现:
java
import java.util.Scanner;
public class NestedIfDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = scanner.nextInt();
System.out.println("请输入成绩:");
int score = scanner.nextInt();
if (age >= 18) {
if (score >= 80) {
System.out.println("可以参加比赛");
} else {
System.out.println("成绩不达标");
}
} else {
System.out.println("年龄不符合要求");
}
}
}
3. 更简洁写法
上面的代码可以用逻辑运算符简化:
java
import java.util.Scanner;
public class NestedIfDemo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = scanner.nextInt();
System.out.println("请输入成绩:");
int score = scanner.nextInt();
if (age >= 18 && score >= 80) {
System.out.println("可以参加比赛");
} else {
System.out.println("不符合参赛要求");
}
}
}
七、switch 语句
1. switch 基本格式
java
switch (表达式) {
case 值1:
代码块1;
break;
case 值2:
代码块2;
break;
case 值3:
代码块3;
break;
default:
默认代码块;
break;
}
2. 执行流程
text
1. 先计算 switch 后面表达式的值;
2. 用这个值依次和 case 后面的值进行匹配;
3. 匹配成功后,执行对应 case 中的代码;
4. 遇到 break,结束 switch;
5. 如果所有 case 都不匹配,则执行 default。
3. 示例:星期判断
java
import java.util.Scanner;
public class SwitchDemo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字1-7:");
int week = scanner.nextInt();
switch (week) {
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;
}
}
}
运行示例:
text
请输入数字1-7:
3
星期三
4. break 的作用
break 用于结束 switch。
如果没有 break,会出现 case 穿透现象。
示例:
java
public class SwitchDemo02 {
public static void main(String[] args) {
int week = 2;
switch (week) {
case 1:
System.out.println("星期一");
case 2:
System.out.println("星期二");
case 3:
System.out.println("星期三");
default:
System.out.println("输入结束");
}
}
}
运行结果:
text
星期二
星期三
输入结束
原因:
text
case 2 匹配成功后,因为没有 break,所以继续向下执行。
5. case 穿透的合理使用
需求:
text
输入1-5:工作日
输入6-7:休息日
代码实现:
java
import java.util.Scanner;
public class SwitchDemo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入星期数字:");
int week = scanner.nextInt();
switch (week) {
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("休息日");
break;
default:
System.out.println("输入错误");
break;
}
}
}
6. switch 支持的数据类型
switch 表达式支持的类型包括:
text
byte
short
int
char
String
enum
注意:
text
long、float、double、boolean 不能作为 switch 表达式类型。
八、for 循环
1. for 循环基本格式
java
for (初始化语句; 条件判断语句; 条件控制语句) {
循环体语句;
}
执行流程:
text
1. 执行初始化语句;
2. 判断条件是否成立;
3. 如果条件成立,执行循环体;
4. 执行条件控制语句;
5. 再次判断条件;
6. 条件成立继续执行,条件不成立结束循环。
2. 示例:输出 5 次 Hello Java
java
public class ForDemo01 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println("Hello Java");
}
}
}
运行结果:
text
Hello Java
Hello Java
Hello Java
Hello Java
Hello Java
3. 示例:输出 1 到 10
java
public class ForDemo02 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
}
}
4. 示例:计算 1 到 100 的和
java
public class ForDemo03 {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("1到100的和是:" + sum);
}
}
运行结果:
text
1到100的和是:5050
5. 示例:计算 1 到 100 的偶数和
java
public class ForDemo04 {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) {
sum += i;
}
}
System.out.println("1到100的偶数和是:" + sum);
}
}
运行结果:
text
1到100的偶数和是:2550
6. 更简洁写法
java
public class ForDemo05 {
public static void main(String[] args) {
int sum = 0;
for (int i = 2; i <= 100; i += 2) {
sum += i;
}
System.out.println("1到100的偶数和是:" + sum);
}
}
九、while 循环
1. while 基本格式
java
初始化语句;
while (条件判断语句) {
循环体语句;
条件控制语句;
}
2. 示例:输出 1 到 5
java
public class WhileDemo01 {
public static void main(String[] args) {
int i = 1;
while (i <= 5) {
System.out.println(i);
i++;
}
}
}
运行结果:
text
1
2
3
4
5
3. 示例:计算 1 到 100 的和
java
public class WhileDemo02 {
public static void main(String[] args) {
int i = 1;
int sum = 0;
while (i <= 100) {
sum += i;
i++;
}
System.out.println("1到100的和是:" + sum);
}
}
十、do-while 循环
1. do-while 基本格式
java
初始化语句;
do {
循环体语句;
条件控制语句;
} while (条件判断语句);
注意:
text
do-while 循环最后有一个分号。
2. 示例:输出 1 到 5
java
public class DoWhileDemo01 {
public static void main(String[] args) {
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 5);
}
}
运行结果:
text
1
2
3
4
5
3. do-while 的特点
do-while 循环的特点是:
text
先执行一次循环体,再判断条件。
即使条件一开始就是 false,循环体也会至少执行一次。
示例:
java
public class DoWhileDemo02 {
public static void main(String[] args) {
int i = 10;
do {
System.out.println("执行了一次");
} while (i < 5);
}
}
运行结果:
text
执行了一次
十一、三种循环的区别
| 循环 | 特点 | 适用场景 |
|---|---|---|
| for | 循环次数明确 | 遍历、计数、求和 |
| while | 循环次数不一定明确 | 条件满足时持续执行 |
| do-while | 至少执行一次 | 菜单、输入校验 |
十二、死循环
1. 什么是死循环?
死循环是指循环条件一直成立,程序无法正常结束循环。
示例:
java
public class DeadLoopDemo01 {
public static void main(String[] args) {
while (true) {
System.out.println("这是一个死循环");
}
}
}
2. for 死循环
java
public class DeadLoopDemo02 {
public static void main(String[] args) {
for (;;) {
System.out.println("for 死循环");
}
}
}
3. 死循环的应用场景
死循环不一定都是错误。
在以下场景中,死循环很常见:
text
服务器持续运行
菜单系统持续显示
游戏主循环
消息监听
但死循环通常需要配合 break 退出。
十三、break 语句
1. break 的作用
break 可以用于:
text
1. 结束 switch 语句;
2. 结束当前循环。
2. 示例:循环中使用 break
java
public class BreakDemo01 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break;
}
System.out.println(i);
}
}
}
运行结果:
text
1
2
3
4
当 i == 5 时,执行 break,循环直接结束。
3. 示例:查找第一个能被 7 整除的数
java
public class BreakDemo02 {
public static void main(String[] args) {
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0) {
System.out.println("第一个能被7整除的数是:" + i);
break;
}
}
}
}
运行结果:
text
第一个能被7整除的数是:7
十四、continue 语句
1. continue 的作用
continue 用于结束本次循环,继续下一次循环。
注意:
text
continue 不是结束整个循环,而是跳过当前这一次。
2. 示例:跳过数字 5
java
public class ContinueDemo01 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
continue;
}
System.out.println(i);
}
}
}
运行结果:
text
1
2
3
4
6
7
8
9
10
3. 示例:输出 1 到 20 中不能被 3 整除的数
java
public class ContinueDemo02 {
public static void main(String[] args) {
for (int i = 1; i <= 20; i++) {
if (i % 3 == 0) {
continue;
}
System.out.println(i);
}
}
}
十五、return 语句
1. return 的作用
return 用于结束当前方法。
在 main 方法中使用 return,会直接结束整个程序。
示例:
java
public class ReturnDemo01 {
public static void main(String[] args) {
System.out.println("程序开始");
return;
// 下面这行代码不会执行
// System.out.println("程序结束");
}
}
运行结果:
text
程序开始
2. return 和 break 的区别
| 关键字 | 作用 |
|---|---|
| break | 结束当前 switch 或当前循环 |
| continue | 结束本次循环,进入下一次循环 |
| return | 结束当前方法 |
十六、嵌套循环
1. 什么是嵌套循环?
嵌套循环指的是循环中再写循环。
格式:
java
for (外层循环初始化; 外层循环条件; 外层循环控制) {
for (内层循环初始化; 内层循环条件; 内层循环控制) {
循环体;
}
}
执行特点:
text
外层循环执行一次,内层循环执行一轮。
2. 示例:输出矩形星号
需求:
text
输出 3 行 5 列星号
代码:
java
public class NestedLoopDemo01 {
public static void main(String[] args) {
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 5; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
运行结果:
text
*****
*****
*****
3. 示例:输出直角三角形
需求:
text
*
**
***
****
*****
代码:
java
public class NestedLoopDemo02 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
4. 示例:九九乘法表
java
public class MultiplicationTable {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "×" + i + "=" + (i * j) + "\t");
}
System.out.println();
}
}
}
运行结果:
text
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
十七、综合案例一:猜数字游戏
需求
程序中定义一个固定数字,让用户不断输入数字进行猜测。
规则:
text
如果猜大了,提示"猜大了";
如果猜小了,提示"猜小了";
如果猜对了,提示"猜对了",并结束程序。
代码实现
java
import java.util.Scanner;
public class GuessNumberGame {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int target = 66;
while (true) {
System.out.println("请输入你猜的数字:");
int guess = scanner.nextInt();
if (guess > target) {
System.out.println("猜大了");
} else if (guess < target) {
System.out.println("猜小了");
} else {
System.out.println("猜对了");
break;
}
}
}
}
运行示例
text
请输入你猜的数字:
50
猜小了
请输入你猜的数字:
80
猜大了
请输入你猜的数字:
66
猜对了
十八、综合案例二:登录验证
需求
用户最多输入 3 次密码。
规则:
text
正确密码是 123456;
输入正确,提示"登录成功";
输入错误,提示剩余次数;
错误 3 次后,提示"账号已锁定"。
代码实现
java
import java.util.Scanner;
public class LoginDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String correctPassword = "123456";
for (int i = 1; i <= 3; i++) {
System.out.println("请输入密码:");
String password = scanner.next();
if (password.equals(correctPassword)) {
System.out.println("登录成功");
break;
} else {
int remain = 3 - i;
if (remain == 0) {
System.out.println("账号已锁定");
} else {
System.out.println("密码错误,还剩 " + remain + " 次机会");
}
}
}
}
}
代码说明
这里判断字符串是否相等,使用的是:
java
password.equals(correctPassword)
不要写成:
java
password == correctPassword
原因:
text
String 是引用数据类型,判断字符串内容是否相等应使用 equals 方法。
十九、综合案例三:简易菜单系统
需求
使用循环和 switch 实现菜单系统。
菜单内容:
text
===== 学生管理系统 =====
1. 添加学生
2. 删除学生
3. 修改学生
4. 查询学生
0. 退出系统
请输入你的选择:
代码实现
java
import java.util.Scanner;
public class MenuDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("===== 学生管理系统 =====");
System.out.println("1. 添加学生");
System.out.println("2. 删除学生");
System.out.println("3. 修改学生");
System.out.println("4. 查询学生");
System.out.println("0. 退出系统");
System.out.println("请输入你的选择:");
int choice = scanner.nextInt();
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 0:
System.out.println("退出系统");
return;
default:
System.out.println("输入有误,请重新输入");
break;
}
}
}
}
代码说明
这里使用:
java
while (true)
表示菜单一直显示。
当用户输入 0 时:
java
return;
直接结束 main 方法,程序结束。
二十、常见错误与解决方法
1. if 条件后面误加分号
错误写法:
java
int age = 16;
if (age >= 18);
{
System.out.println("成年");
}
运行结果:
text
成年
原因:
text
if 后面的分号表示 if 语句已经结束,后面的大括号变成普通代码块。
正确写法:
java
int age = 16;
if (age >= 18) {
System.out.println("成年");
}
2. switch 中忘记 break
错误写法:
java
int week = 1;
switch (week) {
case 1:
System.out.println("星期一");
case 2:
System.out.println("星期二");
default:
System.out.println("输入结束");
}
问题:
text
会出现 case 穿透。
如果不想穿透,应加 break。
3. while 循环忘记修改条件
错误写法:
java
int i = 1;
while (i <= 5) {
System.out.println(i);
}
原因:
text
i 一直等于 1,条件永远成立,形成死循环。
正确写法:
java
int i = 1;
while (i <= 5) {
System.out.println(i);
i++;
}
4. 字符串比较使用 ==
错误写法:
java
String password = "123456";
if (password == "123456") {
System.out.println("登录成功");
}
推荐写法:
java
String password = "123456";
if (password.equals("123456")) {
System.out.println("登录成功");
}
5. for 循环条件写错
错误写法:
java
for (int i = 1; i >= 10; i++) {
System.out.println(i);
}
原因:
text
i 初始值是 1,条件 i >= 10 一开始就不成立,所以循环一次都不会执行。
正确写法:
java
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
二十一、本章练习
练习1:判断正负数
从键盘输入一个整数,判断它是正数、负数还是零。
参考代码:
java
import java.util.Scanner;
public class Practice01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num = scanner.nextInt();
if (num > 0) {
System.out.println("正数");
} else if (num < 0) {
System.out.println("负数");
} else {
System.out.println("零");
}
}
}
练习2:判断闰年
判断一个年份是否为闰年。
规则:
text
能被4整除但不能被100整除;
或者能被400整除。
参考代码:
java
import java.util.Scanner;
public class Practice02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scanner.nextInt();
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
System.out.println(year + " 是闰年");
} else {
System.out.println(year + " 不是闰年");
}
}
}
练习3:计算 1 到 n 的和
从键盘输入一个正整数 n,计算 1 到 n 的和。
参考代码:
java
import java.util.Scanner;
public class Practice03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个正整数:");
int n = scanner.nextInt();
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
System.out.println("1到" + n + "的和是:" + sum);
}
}
练习4:输出水仙花数
水仙花数指的是一个三位数,其各位数字立方和等于该数本身。
例如:
text
153 = 1³ + 5³ + 3³
参考代码:
java
public class Practice04 {
public static void main(String[] args) {
for (int i = 100; i <= 999; i++) {
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i) {
System.out.println(i);
}
}
}
}
运行结果:
text
153
370
371
407
练习5:打印倒三角
输出如下图形:
text
*****
****
***
**
*
参考代码:
java
public class Practice05 {
public static void main(String[] args) {
for (int i = 5; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
二十二、本章总结
本章主要学习了 Java 流程控制语句。
重点内容如下:
- Java 程序结构包括顺序结构、分支结构和循环结构;
- if 语句用于简单条件判断;
- if-else 用于二选一判断;
- if-else if-else 用于多条件判断;
- switch 适合固定值匹配;
- switch 中 break 用于结束分支;
- for 循环适合循环次数明确的场景;
- while 循环适合循环次数不明确的场景;
- do-while 循环至少执行一次;
- break 用于结束循环或 switch;
- continue 用于跳过本次循环;
- return 用于结束当前方法;
- 嵌套循环常用于打印图形、九九乘法表等场景;
- 菜单系统常使用 while + switch 实现。
二十三、下一章预告
下一章将学习 Java 数组,主要内容包括:
- 数组的概念
- 一维数组
- 数组初始化
- 数组遍历
- 数组最大值与最小值
- 数组元素求和
- 数组拷贝
- 二维数组
- 杨辉三角
- 稀疏数组
数组是学习排序、查找、数据结构和项目开发的重要基础。