JAVA程序的控制结构循环语句
一、导语
当我们在Java中处理重复的任务时,循环语句是非常有用的。循环结构用于反复执行一个语句块,直到满足终止循环的条件时为止。一个循环一般包含3部分内容。
(1)初始化部分:设置初始条件,一般只执行一次。
(2)终止部分:设置终止条件,它应该是一个布尔表达式,每次循环都要求值一次,用以判断是否满足终止条件。
(3)循环体部分:被反复执行的语句块。
Java 语言提供 4种循环结构:“当型”循环结构、“直到型”循环结构、for 循环结构和 for each循环结构。Java支持多种类型的循环语句,包括for
循环、while
循环和do-while
循环。下面我将逐一详细解释这些循环语句。
二、for循环语句
1、作用
for循环通常用于已知循环次数的情况,使用该循环时,测试是否满足某个条件,如果满足条件,则进入下一次循环,否则,退出该循环。
2、for语句格式如下:
说明:
语句叫作循环体,可以是单条语句或复合语句。
3、简单的示例如下:
这个示例会打印数字0到9。
在这个例子中,i = 1
是初始化部分,定义了循环变量 i
的初始值;i <= 10
是条件判断部分,只要 i
小于或等于 10 ,循环就会继续;i++
是迭代更新部分,每次循环结束后 i
的值增加 1 。for
循环的灵活性很高,可以通过改变初始化、条件判断和迭代更新的表达式来满足各种不同的需求。
4在 Java 语言中,使用 for
循环时可能会遇到一些易错点:
-
循环变量的作用域:
- 如果在
for
循环的初始化部分定义了循环变量,那么这个变量的作用域通常只在for
循环内部。但有时可能会误将其在循环外使用,导致编译错误。
- 如果在
-
忘记更新循环变量:
- 例如:
for(int i = 0; i < 10; i)
,忘记了写i++
,这样会导致死循环或者无法达到预期的循环次数。
- 例如:
-
边界条件错误:
- 比如要遍历一个数组
arr
,写成了for(int i = 0; i <= arr.length; i++)
,应该是i < arr.length
,否则会出现数组越界的错误。
- 比如要遍历一个数组
-
嵌套
for
循环时的逻辑混乱:- 当存在多层嵌套的
for
循环时,容易混淆各个循环变量的作用和控制逻辑,导致错误的结果。
- 当存在多层嵌套的
-
浮点数比较:
- 如果循环条件中涉及到浮点数的比较,由于浮点数的精度问题,可能会导致意外的结果。例如:
for(double d = 0.0; d < 1.0; d += 0.1)
,可能不会按照预期执行 10 次,因为浮点数的加法可能存在精度损失。
- 如果循环条件中涉及到浮点数的比较,由于浮点数的精度问题,可能会导致意外的结果。例如:
三、while
循环语句
1、作用:
实现“当型”循环结构。while
循环适用于在执行循环体之前无法确定循环次数,而只知道循环继续的条件的情况。
2、while
循环格式:
说明:
(1)表达式叫作循环条件表达式,一般为关系表达式或逻辑表达式,必须用“()”括起来。
(2)语句叫作循环体,可以是单条语句或复合语句。
只要条件为true
,就会一直执行循环体。
例如,如果要一直读取用户输入,直到用户输入特定的字符结束,可以这样写:
Scanner scanner = new Scanner(System.in);
String input;
while(!(input = scanner.nextLine()).equals("exit")) {
// 处理输入
System.out.println("您输入的是:" + input);
}
在这个例子中,只要用户输入的不是 exit
,循环就会一直进行。
3、示例:
int i = 0; | |
while (i < 10) { | |
System.out.println(i); | |
i++; | |
} |
这个示例也会打印数字0到9。
四、do-while
循环语句
1、作用:
实现“直到型”循环结构。
2、格式:
表达式叫作循环条件表达式,一般为关系表达式或逻辑表达式,必须用“()”括起来。
语句叫作循环体,可以是单条语句或复合语句。
do…·while 语句以分号结束。
3、执行过程:
先执行循环语句序列,然后计算条件表达式的值,当条件表达式 的值为true时,就重复执行语句循环语句序列;直到条件表达式的值为false才结束循环,如图所示。
do-while
循环与 while
循环类似,但它至少会执行一次循环体。
比如,假设需要用户输入一个大于 0 的数字,直到输入正确为止:
Scanner scanner = new Scanner(System.in);
int number;
do {
System.out.println("请输入一个大于 0 的数字:");
number = scanner.nextInt();
} while (number <= 0);
在这个例子中,无论用户第一次输入的数字是否大于 0 ,循环体都会先执行一次,然后再根据条件判断是否继续执行。
package tsa;
public class houdu {
public static void main(String[] args) {
// 初始纸张厚度(单位:毫米)
double begin = 0.2;
// 珠穆朗玛峰的高度(单位:毫米)
double Height = 8843800; // 8843.8m 转换为毫米
// 所需达到的新高度(单位:毫米)
double newHeight = 0.8;
// 计算达到珠穆朗玛峰高度需要多少次对折
int count = 0;
double x = begin;
while (x < Height) {
x *= 2; // 每次对折厚度加倍
count++; // 对折次数加1
}
System.out.println("对折 " + count + " 次后,纸张的厚度可达珠穆朗玛峰的高度。");
// 修改代码以计算达到0.8mm需要多少次对折
int newcount = 0;
x = begin; // 重置当前厚度为初始厚度
while (x < newHeight) {
x *= 2; // 每次对折厚度加倍
newcount++; // 对折次数加1
}
System.out.println("对折 " + newcount + " 次后,纸张的厚度可达0.8mm。");
}
}4、do-while
循环语句例子:
说明:
① do--while 语句是先执行sum=sum+i;和i++;语句,后判断表达式i≤n是否成立。若条件成立,则继续执行循环体;若条件不成立,则退出循环。
输出sum
结束
②即使表达式的值一开始就不成立,语句仍要执行一次。如当输入的n为0时,i≤n不成立,但语句sum=sum+i;和i++;也要执行一次。
图3-18求累加和流程图2
③在循环体中应有能不断修改循环条件的语句,最终能使循环结束,否则会形成“死循环”。