本课学习目标
- 理解循环为什么可以减少重复代码。
- 使用 For...Next 执行已知次数的循环。
- 使用 Step 控制递增或递减幅度。
- 使用 While...End While 在条件成立时重复执行。
- 掌握 Do While 与 Do Until。
- 理解“先检查条件”和“执行后再检查条件”的区别。
- 使用 Exit For 与 Exit Do 提前结束循环。
- 避免无限循环,并完成一个数字循环分析器。
9.1 为什么需要循环?
循环让同一组代码根据次数或条件自动重复执行,是程序设计最基本的流程控制工具之一。
假设要显示 1 到 5:
lblResult.Text = "1"
lblResult.Text &= Environment.NewLine & "2"
lblResult.Text &= Environment.NewLine & "3"
lblResult.Text &= Environment.NewLine & "4"
lblResult.Text &= Environment.NewLine & "5"
使用 For 循环可以缩短为:
For number As Integer = 1 To 5
lblResult.Text &= CStr(number) & Environment.NewLine
Next
9.2 For...Next:已知重复次数
如果你大致知道循环要执行多少次,For...Next 通常是最清楚的选择。
For counter As Integer = 1 To 5
lblResult.Text &= "第 " & CStr(counter) & " 次" & Environment.NewLine
Next
这个循环会执行 5 次。每次执行时,counter 都会自动增加 1。
| 次数 | counter | 显示结果 |
|---|---|---|
| 1 | 1 | 第 1 次 |
| 2 | 2 | 第 2 次 |
| 3 | 3 | 第 3 次 |
| 4 | 4 | 第 4 次 |
| 5 | 5 | 第 5 次 |
9.3 使用 Step 改变步长
默认情况下,For 每次增加 1。使用 Step 可以改变递增幅度。
每次增加 2
For number As Integer = 2 To 10 Step 2
lblResult.Text &= CStr(number) & " "
Next
输出:
2 4 6 8 10
倒数
For number As Integer = 10 To 1 Step -1
lblResult.Text &= CStr(number) & " "
Next
当起点大于终点时,需要负数 Step 才能递减。
9.4 用循环累加数值
循环常常与“累加器”变量一起使用。例如计算 1 到 5 的总和:
Dim total As Integer = 0
For number As Integer = 1 To 5
total += number
Next
lblResult.Text = "总和:" & CStr(total)
执行过程:
| number | 执行前 total | 执行 total += number 后 |
|---|---|---|
| 1 | 0 | 1 |
| 2 | 1 | 3 |
| 3 | 3 | 6 |
| 4 | 6 | 10 |
| 5 | 10 | 15 |
total += number 是:
total = total + number
的简写。
9.5 While...End While:条件成立就继续
如果循环次数不是重点,而是“某个条件成立期间持续重复”,可以使用 While。
Dim number As Integer = 1
While number <= 5
lblResult.Text &= CStr(number) & Environment.NewLine
number += 1
End While
执行逻辑是:
9.6 Do While...Loop
Do While 与 While 的基本意义很接近:
Dim number As Integer = 1
Do While number <= 5
lblResult.Text &= CStr(number) & Environment.NewLine
number += 1
Loop
只要条件为 True,就继续循环。
9.7 Do Until...Loop
Do Until 则可以读成:“一直执行,直到条件成立。”
Dim number As Integer = 1
Do Until number > 5
lblResult.Text &= CStr(number) & Environment.NewLine
number += 1
Loop
这里当 number > 5 变成 True 时,循环就结束。
条件为 True 时继续
例如:只要 number ≤ 5,就继续执行。
直到条件为 True 才停止
例如:一直执行,直到 number > 5。
9.8 先检查与后检查循环
Do 循环还有另一种写法:把条件放到 Loop 后面。
Dim number As Integer = 10
Do
lblResult.Text &= CStr(number) & Environment.NewLine
number += 1
Loop While number <= 5
虽然一开始 number 已经是 10,不符合“≤ 5”,但循环内容仍然会执行一次,因为条件是在执行后才检查。
Do While 条件 ... Loop
先检查条件。初始条件不成立时,可能一次也不执行。
Do Until 条件 ... Loop
先检查“是否已经达到停止条件”。
Do ... Loop While/Until
先执行一次,再决定是否继续。
9.9 提前结束循环
有时虽然循环还没自然结束,但程序已经找到目标,这时可以提前离开循环。
Exit For
For number As Integer = 1 To 100
If number = 7 Then
lblResult.Text = "找到 7"
Exit For
End If
Next
Exit Do
Dim number As Integer = 1
Do While number <= 100
If number = 7 Then
Exit Do
End If
number += 1
Loop
Exit For 只能离开当前 For 循环;Exit Do 用于 Do 循环。
9.10 应该选择哪一种循环?
9.11 实作:数字循环分析器
建立新的 Windows Forms 项目:
NumberLoopAnalyzer2026
用户输入一个正整数上限,例如 10。程序使用 For 循环显示 1 到该数字、计算总和、统计偶数数量,并显示分析结果。
加入以下控件:
| 控件 | Name | Text / 用途 |
|---|---|---|
| Form | Form1 | Text = 数字循环分析器 |
| TextBox | txtLimit | 输入循环上限 |
| Button | btnForAnalyze | Text = For 分析 |
| Button | btnWhileShow | Text = While 显示 |
| Button | btnClear | Text = 清除 |
| TextBox | txtOutput | Multiline = True;ScrollBars = Vertical;ReadOnly = True |
For 分析按钮
Private Sub btnForAnalyze_Click(sender As Object, e As EventArgs) _
Handles btnForAnalyze.Click
Dim limit As Integer = CInt(txtLimit.Text)
Dim total As Integer = 0
Dim evenCount As Integer = 0
Dim numberList As String = ""
For number As Integer = 1 To limit
numberList &= CStr(number) & " "
total += number
If number Mod 2 = 0 Then
evenCount += 1
End If
Next
txtOutput.Text =
"数字:" & numberList.Trim() & Environment.NewLine &
"总和:" & CStr(total) & Environment.NewLine &
"偶数数量:" & CStr(evenCount)
End Sub
这段代码把前几课的知识组合起来:
- 第 5 课:变量与 Integer。
- 第 6 课:Mod 与累加表达式。
- 第 7 课:If 条件判断。
- 本课:For 循环重复处理每个数字。
While 显示按钮
Private Sub btnWhileShow_Click(sender As Object, e As EventArgs) _
Handles btnWhileShow.Click
Dim limit As Integer = CInt(txtLimit.Text)
Dim number As Integer = 1
Dim output As String = ""
While number <= limit
output &= CStr(number) & Environment.NewLine
number += 1
End While
txtOutput.Text = output
End Sub
清除按钮
Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
txtLimit.Clear()
txtOutput.Clear()
txtLimit.Focus()
End Sub
9.12 逐步理解 For 分析逻辑
例如用户输入 10,limit 就是 10。
total 和 evenCount 从 0 开始,numberList 从空字符串开始。
每一次循环都处理当前 number。
total 累加当前数字;如果 number Mod 2 = 0,就把偶数计数加 1。
所有数字都处理完成,才一次把列表、总和和偶数数量显示出来。
9.13 测试几个输入
| limit | 数字 | 总和 | 偶数数量 |
|---|---|---|---|
| 5 | 1 2 3 4 5 | 15 | 2 |
| 10 | 1–10 | 55 | 5 |
| 1 | 1 | 1 | 0 |
9.14 什么是无限循环?
无限循环(Infinite Loop)是指循环条件永远不会变成停止状态。
Dim number As Integer = 1
While number <= 5
txtOutput.Text &= CStr(number)
End While
这里 number 永远是 1,所以 number <= 5 永远为 True。
正确写法必须改变 number:
While number <= 5
txtOutput.Text &= CStr(number)
number += 1
End While
9.15 初学者常见错误
For 的起点与 Step 不合理
例如 10 To 1 却使用默认 Step 1,不会得到预期的倒数。应使用 Step -1。
While 忘了更新条件变量
条件永远不改变时,可能出现无限循环。
累加变量放错位置
如果 total 在循环里面每次都重新设为 0,就无法累计之前的结果。
把 Exit For 当 End For
Exit For 是提前离开循环,不是正常结束 For 的结构关键字。For 仍然要以 Next 结束。
9.16 小练习
- 在数字循环分析器中加入“奇数数量”。
- 加入一个按钮,用 For number = limit To 1 Step -1 显示倒数。
- 用 For 显示 2、4、6、8……直到 limit。
- 用 Do Until 改写 While 显示按钮。
- 加入一个“找到第一个可被 7 整除的数字”示例,并使用 Exit For。
- 输入 10,手工计算总和与偶数数量,再与程序输出比较。
本课复习
- 什么情况下最适合使用 For...Next?
- Step -1 的作用是什么?
- While...End While 会在什么时候停止?
- Do While 与 Do Until 有什么区别?
- 为什么后测 Do 循环至少会执行一次?
- Exit For 和 Exit Do 分别做什么?
- 什么是无限循环?最常见原因是什么?
- 为什么 total 必须在循环开始前初始化,而不是每次循环都重新设为 0?