元数据卡
- 前置知识:if/else 分支逻辑、关系操作符
- 预计时间:15 分钟
- 完成标志:能用
while和for实现循环,知道do-while的特点
你学会了选择。但老陈在井边说的三句话,你只用了两句。还有一句:
懂得重复——你才走得到终点。
阿花站在铁匠铺门口,面前排了一长串村民。
"我要 10 个铁锭。一个一个来——给一个,收一个的钱,直到给满 10 个。"
这种"反复做同一件事,直到条件不再满足"的场景,你的代码也需要。
while 循环——先判断,再执行
int count = 0;
while (count < 10) {
System.out.println("交付第 " + (count + 1) + " 个铁锭");
count++; // 关键——别忘了让条件最终变为 false!
}语言:Java 17+ 预期输出:打印 10 行,从"交付第 1 个铁锭"到"交付第 10 个铁锭"
while 循环的执行逻辑很简单:
条件为 true → 执行代码块 → 回到条件判断
→ 还是 true → 再执行 → …… → 条件变为 false → 跳出循环Python 差异: Python 的 while 语法一样,只是条件后面加冒号,代码块用缩进。
count += 1代替count++。
C++ 差异: 语法和 Java 完全一致。C++ 的 while 条件也可以接受整数(非 0 为 true)。
死循环——你的第一个无限坠落
int count = 0;
while (count < 10) {
System.out.println("交付铁锭");
// 忘了 count++!
}
// 这个程序永远打印下去,直到你按 Ctrl+C 杀死它这玩意儿叫死循环(infinite loop)。不是程序卡了——是它跑得太开心,永远不满足退出条件。你开发的第一个小时里至少会遇到一次。终止方法:终端里按 Ctrl+C。
for 循环——把计数三件事写在一起
while 虽然万能,但"从 0 到 9,每次 +1"这个模式太常见了——初始化、条件判断、步进更新,这三行在 while 里被分散到三处。Java 给了你 for 循环:
for (int i = 0; i < 10; i++) {
System.out.println(i);
}语言:Java 17+ 预期输出:0 到 9,每行一个数字
for 的三个部分在圆括号里用分号隔开:
for (初始化 ; 条件 ; 更新) {
循环体
}执行顺序:初始化(只一次)→ 条件判断(true 才进)→ 循环体 → 更新 → 回到条件判断
拿个具体例子:打印 1 到 5 的平方:
for (int i = 1; i <= 5; i++) {
int square = i * i;
System.out.println(i + " 的平方 = " + square);
}语言:Java 预期输出:
1 的平方 = 1
2 的平方 = 4
3 的平方 = 9
4 的平方 = 16
5 的平方 = 25Python 差异: Python 没有 C 风格的
for (;;)。全世界的 for 都是for i in range(10):pythonfor i in range(10): # 0 到 9 print(i) for i in range(1, 6): # 1 到 5 print(str(i) + " 的平方 = " + str(i*i))
range(start, stop, step)生成整数序列,这是 Python 最优雅的设计之一。
C++ 差异: 语法和 Java 完全一样。但 C++ 允许在初始化部分声明多个变量:
for (int i = 0, j = 10; i < j; i++, j--)
for-each——遍历数组更干净
如果你手头有个数组,想一个个拿出来处理:
int[] scores = {85, 92, 78, 65, 99};
// 传统 for
for (int i = 0; i < scores.length; i++) {
System.out.println(scores[i]);
}
// for-each —— 更干净
for (int score : scores) {
System.out.println(score);
}for-each 语法:for (元素类型 变量名 : 数组或集合)。它自动帮你取每一个元素,不用操心索引和长度。
do-while——至少执行一次
低频语法:
do-while在实际工程中出现频率远低于if/for/while。知道它存在即可。
do-while 和 while 唯一的区别是:至少执行一次循环体,再判断条件。
int num = 100;
while (num < 10) {
System.out.println("你不会看到我——条件一开始就是 false");
}
do {
System.out.println("你会看到我——至少跑一次");
} while (num < 10);语言:Java 预期输出:你会看到我——至少跑一次
什么时候用?当你不管三七二十一,先做一次再判断的时候——比如先显示游戏菜单,再问"继续吗?"
旅人笔记
while → 条件驱动,不计数。for → 计数循环,用得多。for-each → 遍历数组,最干净。do-while → 先做一次再说。核心记住:循环条件必须最终能变为 false,否则等你的只有死循环。