循环简介
学习在 Java 中使用循环进行固定次数的迭代。
重复
在编程中,重复执行一条指令或一组指令是一种常见现象。这种结构被称为循环。例如,假设我们希望程序完成以下任务:
- 逐行读取文档或数据文件,直到文件末尾。
- 使用颜色值逐像素绘制图像,使其显示在屏幕上。
- 依次遍历一个变量集合,处理每个变量的值。
- 对多个数值应用公式以计算结果。
让我们假设我们要显示从 到 的整数。我们可以简单地使用 System.out.println() 语句逐一打印这些数字。我们也可以使用一个变量,通过不断改变其值来重复打印该变量的值,如下所示:
1// 使用变量 a 的多条打印语句 2class Test 3{ 4 public static void main(String[] args) 5 { 6 int a = 0; 7 System.out.println(a); 8 a = 1; 9 System.out.println(a); 10 a = 2; 11 System.out.println(a); 12 a = 3; 13 System.out.println(a); 14 a = 4; 15 System.out.println(a); 16 } 17}
上述代码清楚地展示了 System.out.println(a) 的重复使用。使用单个变量的好处是,我们可以将这种重复转换为 Java 中的循环。
计数控制循环
计数控制循环用于需要固定次数重复执行一组指令的情况。该循环在 for 关键字后包含四个部分,如下所示:
1for (初始化; 条件; 更新) 2{ 3 // 循环体 4}
- 初始化:用于初始化计数器,仅执行一次。
- 条件:在每次循环开始前检查计数器的值。如果为真,则执行循环体;如果为假,则终止循环。
- 更新:更新计数器的值,并再次检查条件。
- 三个部分(初始化、条件、更新)之间用分号
;分隔,并用括号(和)包裹。)后不加分号。 - 循环体是一组需要重复执行的语句。
注意:如果循环体中只有一条语句,则可以省略大括号
{}。
下面的代码使用计数控制循环以紧凑的方式实现了与上面程序相同的输出:
1class Test 2{ 3 public static void main(String args[]) 4 { 5 for (int a = 0; a < 5; a++) 6 { 7 System.out.println(a); // 循环体 8 } 9 } 10}
for 循环使第 5 至第 8 行代码重复执行五次,因此可以说该循环共迭代了五次。
在上述代码中:
- 我们使用整型变量
a作为计数器,并将其初始化为0。 - 使用
a < 5作为条件。 - 每次迭代后更新
a的值。 - 循环体从
)之后开始。 - 循环体中只包含一条语句:
System.out.println(a);。
让我们借助执行过程表来逐步理解 for 循环的运行机制。
有两条可执行语句,但当我们展开循环并逐步写出每一步时,共有十一个执行步骤。循环根据条件迭代所有值,以执行循环体中的每一条语句。
举个例子,生成前五个非负偶数:0, 2, 4, 6, 8。
1class Test 2{ 3 public static void main(String args[]) 4 { 5 for (int a = 0, e = 0; a < 5; a++) 6 { 7 e = a * 2; // 将值乘以 2 8 System.out.println(e); 9 } 10 } 11}
在 for 循环中,可以在初始化部分使用逗号分隔多个变量的声明,如上例第 5 行所示。
借助以下执行流程图,我们可以更清楚地理解上述程序的运行逻辑:
循环体由第 7 至第 8 行构成。
再举一个例子:生成前 100 个非负偶数:0, 2, 4, ..., 198。
1class Test 2{ 3 public static void main(String args[]) 4 { 5 for (int counter = 0; counter < 100; counter++) 6 { 7 int twice = counter * 2; // 将每个 counter 值乘以 2 8 System.out.println(twice); 9 } 10 } 11}
在此程序中,counter 从 0 变化到 99,我们将每个值乘以 2,计算出 0 * 2, 1 * 2, 2 * 2, ..., 99 * 2。第 6 至第 9 行构成一个包含两条语句的代码块,代表循环体。
我们也可以通过设置计数器的增量为 2 来生成相同序列的偶数。可以直接使用 for (int c = 0; c < 200; c += 2),如下所示:
1class Test 2{ 3 public static void main(String args[]) 4 { 5 for (int c = 0; c < 200; c += 2) // 步长为 2 的 for 循环,生成同样的偶数序列 6 { 7 System.out.println(c); 8 } 9 } 10}
如果要生成介于 1 和 700 之间的 7 的倍数,可以使用 (int c = 7; c < 701; c += 7)。起始值设为 7,这样每次增加 7 都能到达下一个 7 的倍数。将此逻辑嵌入 for 循环中,即可输出生成的数值。
计数控制循环的编程练习
以下是几个帮助你练习使用 for 循环编写 Java 程序的例子。点击“显示答案”按钮,即可查看解决相应问题的程序代码。你可以将提供的解决方案复制粘贴到代码编辑器中,验证你的解答是否正确。编程中通常存在多种正确的实现方式。
奇数
编写一个程序,打印前 100 个正奇数:1, 3, 5, ..., 199。
1class Test 2{ 3 public static void main(String args[]) 4 { 5 // 请在此处编写代码 6 } 7}
你可以在上方的代码编辑器中运行以下代码:
1class Test 2{ 3 public static void main(String args[]) 4 { 5 for (int c = 1; c < 200; c += 2) 6 { 7 System.out.println(c); 8 } 9 } 10}
等差数列
等差数列是一组按顺序排列的数,其中任意相邻两项之间的差值恒定。
编写一个程序,打印等差数列 1, 6, 11, ..., < 100 的各项。
1class Test 2{ 3 public static void main(String args[]) 4 { 5 // 请在此处编写代码 6 } 7}
你可以在上方的代码编辑器中运行以下代码:
1class Test 2{ 3 public static void main(String args[]) 4 { 5 for (int i = 1; i < 100; i += 5) 6 { 7 System.out.println(i); 8 } 9 } 10}
n 的乘法表
编写一个程序,接收用户输入的一个整数,并打印该数的前 20 个倍数,如下所示。
示例输入
15
示例输出
15 x 1 = 5 25 x 2 = 10 3. 4. 5. 65 x 20 = 100
n 个输入的平均值
编写一个程序,计算用户输入的若干个数的平均值。程序首先询问用户希望计算多少个数的平均值,且输入的数量必须大于 0。
示例输入
14 210 320 430 540
示例输出
1平均值为:25
用户输入数的所有因数
编写一个程序,显示用户输入的数的所有因数。
示例输入
120
示例输出
11 22 34 45 510 620
判断是否为质数
质数是指只能被 1 和自身整除的自然数。
编写一个程序,判断用户输入的自然数是否为质数。
示例输入 1
17
示例输出 1
17 是质数
示例输入 2
120
示例输出 2
120 不是质数