7.循环语句
(1)循环的结构
循环是一种控制结构,允许你重复执行一组语句,直到某个条件不再满足。在Java中,有三种主要类型的循环结构:
1. for循环:`for` 循环是用于已知循环次数的情况。它包括初始化、条件检查和迭代部分。通常在需要执行固定次数的循环时使用。
for (初始化; 条件; 迭代) {
// 在条件为真时执行的代码
}
2. while循环:`while` 循环用于在满足条件的情况下重复执行一组语句。条件检查在循环体执行之前。
while (条件) {
// 在条件为真时执行的代码
}
3. do-while循环:`do-while` 循环与 `while` 循环类似,但它保证至少执行一次循环体,因为条件检查在循循环体之后。
do {
// 执行的代码
} while (条件);
(2)注意事项
1. 循环条件:确保循环的条件在某个时刻会变为假,否则你可能会陷入无限循环。确保循环条件在循环体内能够改变以达到终止条件。
2. 循环控制变量:在循环中使用循环控制变量,确保它们在循环体内适当地更新,以便在某个时刻满足循环条件。如果你忘记更新循环控制变量,可能导致无限循环或不正确的结果。
3. 初始化变量:在使用 `for` 循环时,始终在循环之前初始化循环控制变量。这有助于防止变量保留上一次循环的值。
4. 循环嵌套:在循环内部可以包含其他循环,但要小心处理嵌套循环的复杂性。确保理解内部循环和外部循环之间的关系。
5. 循环的目的:在编写循环时,确保明确循环的目的和结束条件。避免不必要的循环和重复。
6. 防止死循环:小心避免编写可能导致死循环(无法终止的循环)的代码。确保循环条件最终会变为假。
7. 循环体内的操作:确保循环体内的操作不会引起错误或不必要的计算。避免在循环内部做过多的工作,以提高效率。
8. 循环计数:在需要知道循环执行了多少次的情况下,使用计数器来跟踪循环的次数。这对于性能分析和调试很有帮助。
9. 循环的退出条件:在 `while` 循环中,确保条件不会在循环体之外的代码执行之后变为假,否则循环可能会提前退出。
10. 循环的性能:如果性能是关键问题,要注意循环的复杂度。不必要的嵌套或重复操作可能会导致性能下降。
11. 关闭资源:如果在循环中使用了资源如文件、数据库连接或网络连接,确保在循环结束后关闭这些资源,以避免资源泄漏。
通过遵守这些注意事项,可以确保循环结构在你的程序中正确工作,避免潜在的问题和错误。循环是编程中非常有用的工具,但也需要谨慎使用以确保代码的正确性和可维护性。
(3)for 循环
`for` 循环是一种常用的循环结构,用于已知循环次数的情况,它由三个部分组成:初始化、条件检查和迭代部分。`for` 循环的结构如下:
for (初始化; 条件; 迭代) {
// 在条件为真时执行的代码
}
这三个部分的作用如下:
1. 初始化:在循环开始之前执行一次的语句。通常用于初始化循环控制变量(例如,`int i = 0`),这是一个可选部分。
2. 条件:在每次循环迭代之前检查的条件。只有当条件为真时,循环将继续执行。如果条件为假,循环将终止。
3. 迭代:在每次循环迭代结束后执行的语句。通常用于递增或递减循环控制变量(例如,`i++` 或 `i--`),这也是一个可选部分。
`for` 循环的典型用法是执行一组语句一定次数,例如遍历数组中的元素或执行特定的迭代任务。以下是一个示例,演示了 `for` 循环的结构:
for (int i = 0; i < 5; i++) {
System.out.println("循环执行次数:" + i);
}
在这个示例中,`for` 循环会执行5次,因为初始化部分设置 `i` 为0,条件部分检查 `i` 是否小于5,迭代部分在每次迭代后将 `i` 增加1。
`for` 循环是控制循环次数的理想工具,你可以根据循环的需要来调整初始化、条件和迭代部分,以满足特定的问题和任务。这种循环结构通常用于遍历数组、集合或进行迭代计算。
(4)while循环
`while` 循环是一种常见的循环结构,它用于在满足条件的情况下重复执行一组语句。`while` 循环的结构如下:
while (条件) {
// 在条件为真时执行的代码
}
`while` 循环的工作原理是,首先检查条件是否为真(`true`),如果条件为真,就执行循环体内的代码,然后再次检查条件。只要条件为真,循环将继续执行。一旦条件变为假,循循环将终止,控制流将移出循环。
以下是一个示例,演示如何使用 `while` 循环来计算从1到5的数字的总和:
int sum = 0; // 初始化一个变量用于存储总和
int number = 1; // 初始化一个变量用于计数
while (number <= 5) { // 条件:如果number小于等于5
sum += number; // 将number添加到总和
number++; // 增加number的值,以继续下一个数字
}
System.out.println("总和为:" + sum);
在这个示例中,`while` 循环会反复执行,直到 `number` 不再小于等于5。在每次迭代中,将 `number` 的值添加到 `sum` 中,并递增 `number` 的值,以便在下一次迭代中处理下一个数字。一旦 `number` 的值超过5,`while` 循环将结束,然后输出总和。
需要注意的是,如果条件一开始就是假,`while` 循环将不会执行循环体内的代码。因此,在使用 `while` 循环时,要确保条件在某个时刻会变为假,以避免陷入无限循环。同时,要确保在循环体内适当地更新控制条件,以便最终使条件不满足。
(5)do while循环
`do-while` 循环是一种类似于 `while` 循环的循环结构,它确保循环体内的代码至少执行一次,然后在条件检查之后决定是否继续重复执行。`do-while` 循环的结构如下:
do {
// 在条件为真时执行的代码
} while (条件);
`do-while` 循环首先执行循环体内的代码,然后在条件检查之后决定是否继续执行。只要条件为真,循环将继续执行。一旦条件变为假,循环将终止,控制流将移出循环。
以下是一个示例,演示如何使用 `do-while` 循环来询问用户是否继续执行某个操作,至少执行一次:
import java.util.Scanner;
public class DoWhileExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char choice;
do {
System.out.println("执行某个操作...");
System.out.print("是否继续?(y/n): ");
choice = scanner.next().charAt(0);
} while (choice == 'y' || choice == 'Y');
System.out.println("程序结束。");
}
}
在这个示例中,`do-while` 循循环首先执行某个操作,然后询问用户是否继续。无论用户的选择是什么,至少会执行一次操作。只有在用户输入 'y' 或 'Y' 时,循环将继续执行。当用户输入其他字符时,循环将结束。
`do-while` 循环非常适合在需要至少执行一次操作的情况下,并且在操作执行后才知道是否需要继续重复执行。同样,要确保条件在某个时刻会变为假,以避免无限循环。
(6)三种循环的区别以及使用情景
1. for 循环:
结构:`for` 循环具有初始化、条件检查和迭代步骤。这使它适用于已知循环次数的情况。
适用场景:`for` 循环通常用于执行固定次数的循环,例如遍历数组,执行数学计算等。
for (int i = 0; i < 5; i++) {
// 循环体
}
2. while 循环:
结构:`while` 循环只包含条件检查。只要条件为真,循环将执行,条件检查在循环体之前。
适用场景:`while` 循环用于在不确定循环次数的情况下执行代码,只要条件满足,它就会继续执行。
while (条件) {
// 循环体
}
3. do-while 循环:
结构:`do-while` 循环包含条件检查,但条件检查在循循环体之后。这意味着循环体至少执行一次。
适用场景:`do-while` 循环用于确保循环体至少执行一次,然后根据条件来决定是否继续执行。
do {
// 循环体
} while (条件);
主要区别和使用场景总结:
- `for` 循环适用于已知循环次数的情况,循环结构较为复杂,需要初始化、条件检查和迭代。
- `while` 循环适用于不确定循环次数的情况,只要条件满足,就会一直执行。
- `do-while` 循环适用于确保至少执行一次循环体的情况,然后根据条件继续执行。
你的选择应该取决于具体的问题和任务,以及循环条件和循环体的需求。不同的循环结构提供了不同的控制方式来满足不同的编程需求
个人实践
import java.util.Scanner;//while 循环
public class demo6 {
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int number = in.nextInt();
int count = 0;
while (number > 0)
{
number = number / 10;
count = count + 1;
System.out.println("number:" + number + ";count=" + count);
}
System.out.println(count);
in.close();
}
}
import java.util.Scanner;//do while 循环
public class demo7 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int number = (int) (Math.random() * 100 + 1);
int a;
int count = 0;
do
{
a = in.nextInt();
count = count + 1;
if (a > number)
{
System.out.println("偏大");
}
else if (a < number)
{
System.out.println("偏小");
}
}
while (a != number);
System.out.println("恭喜你猜对了,你猜了"+count+"次");
in.close();
}
}
import java.util.Scanner;//for循环
public class demo8 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int count = 0;
int i;
for (i = 1; i <=n; i++)
{
count += i ;
}
System.out.println(count);
in.close();
}
}