while循环语句与选择结构语句类似,都是根据判断条件决定是否执行大括号内的执行语句。区别在于,while语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会执行,直到条件不成立,while循环结束。
while循环语句的语法结构如下:
while(循环条件){
执行语句
...
}
在上面的语法结构中,{}中的执行语句被称作循环体,循环体是否执行取决于循环条件。当循环条件为true时,循环体就会执行。循环体执行完毕,程序继续判断循环条件,如果条件仍为true则继续执行循环体,直到循环条件为false时,整个循环过程才会结束。
接下来通过打印1~4之间的自然数演示while循环语句的用法。
public class Example12 {
public static void main(String[] args) {
int x = 1; // 定义变量x,初始值为1
while (x <= 4) { // 循环条件
System.out.println("x = " + x); // 条件成立,打印x的值
x++; // x进行自增
}
}
}
上述代码中,第3行代码定义了变量x,初始值为1。在满足循环条件x <= 4的情况下,循环体会重复执行,打印x的值并让x自增。由运行结果可知,打印结果中x的值分别为1、2、3、4。需要注意的是,文件中第6行代码在每次循环时改变变量x的值,从而达到最终改变循环条件的目的。如果没有这行代码,x的值一直为1,整个循环会进入无限循环的状态,永远不会结束。
do…while循环语句和while循环语句功能类似, 语法结构如下:
do {
执行语句
...
} while(循环条件);
在上面的语法结构中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件决定是否继续执行。
接下来使用do…while循环语句输出1~4之间的自然数。
public class Example13 {
public static void main(String[] args) {
int x = 1; // 定义变量x,初始值为1
do {
System.out.println("x = " + x); // 打印x的值
x++; // 将x的值自增
} while (x <= 4); // 循环条件
}
}
for循环语句是最常用的循环语句, 一般用在循环次数已知的情况下。 for循环语句的语法格式如下:
for(初始化表达式; 循环条件; 操作表达式)
{
执行语句
...
}
在上面的语法格式中,for关键字后面()中包括了三部分内容:初始化表达式、循环条件和操作表达式,它们之间用(;)分隔,{}中的执行语句为循环体。 接下来分别用a表示初始化表达式,b表示循环条件,c表示操作表达式,d表示循环体,通过序号分析for循环的执行流程。具体如下: for(a ; b ; c){ d }
第一步,执行a
第二步,执行b,如果判断结果为true,执行第三步,如果判断结果为false,执行第五步
第三步,执行d
第四步,执行c,然后重复执行第二步
第五步,退出循环
接下来对自然数1~4求和演示for循环的使用。
public class Example14 {
public static void main(String[] args) {
int sum = 0; // 定义变量sum,用于记住累加的和
for (int i = 1; i <= 4; i++) { // i的值会在1~4之间变化
sum += i; // 实现sum与i的累加
}
System.out.println("sum = " + sum); // 打印累加的和
}
}
在上述程序中,变量i的初始值为1,在判断条件i<=4结果为true的情况下,执行循环体sum+=i;执行完毕后,执行操作表达式i++,i的值变为2,然后继续进行条件判断,开始下一次循环,直到i=5时,判断条件i<=4结果为false,循环结束,执行for循环后面的代码,打印“sum=10”。
每次循环中变量sum和i的值的变化如下表。
循环次数 |
i |
sum |
第一次 |
1 |
1 |
第二次 |
2 |
3 |
第三次 |
3 |
6 |
第四次 |
4 |
10 |
循环嵌套是指在一个循环语句的循环体中再定义一个循环语句的语法结构。while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,其中最常见的是在for循环中嵌套for循环,格式如下:
for(初始化表达式; 循环条件; 操作表达式) {
...
for(初始化表达式; 循环条件; 操作表达式) {
执行语句
...
}
...
}
接下来通过使用“*”打印直角三角形演示for循环嵌套的使用。
public class Example15 {
public static void main(String[] args) {
int i, j; // 定义两个循环变量
for (i = 1; i <= 9; i++) { // 外层循环
for (j = 1; j <= i; j++) { // 内层循环
System.out.print("*"); // 打印*
}
System.out.print("\n"); // 换行
}
}
}
下面分步骤讲解循环过程,具体如下:
第一步,第3行代码定义了两个循环变量i和j,其中i为外层循环变量,j为内层循环变量。
第二步,第4行代码将i初始化为1,判断条件为i <= 9为true,首次进入外层循环的循环体。
第三步,第5行代码将j初始化为1,由于此时i的值为1,条件j <= i为true,首次进入内层循环的循环体,打印一个“*”。
第四步,执行第5行代码中内层循环的操作表达式j++,将j的值自增为2。
第五步,执行第5行代码中的判断条件j<=i,判断结果为false,内层循环结束。执行第8行代码,打印换行符。
第六步,执行第4行代码中外层循环的操作表达式i++,将i的值自增为2。
第七步,执行第4行代码中的判断条件i<=9,判断结果为true,进入外层循环的循环体,继续执行内层循环。
第八步,由于i的值为2,内层循环会执行两次,即在第2行打印两个“*”。在内层循环结束时会打印换行符。
第九步,以此类推,在第3行会打印3个“*”,逐行递增,直到i的值为10时,外层循环的判断条件i <= 9结果为false,外层循环结束,整个循环也就结束了。
1.break语句
在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现在循环语句中,作用是跳出循环语句,执行循环后面的代码。
public class Example16 {
public static void main(String[] args) {
int x = 1; // 定义变量x,初始值为1
while (x <= 4) { // 循环条件
System.out.println("x = " + x); // 条件成立,打印x的值
if (x == 3) {
break;
}
x++; // x进行自增
}
System.out.println("while后面的输出语句,x = " + x);
}
}
当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想使用break语句跳出外层循环,则需要在外层循环中使用break语句。
public class Example17 {
public static void main(String[] args) {
int i, j; // 定义两个循环变量
for (i = 1; i <= 9; i++) { // 外层循环
for (j = 1; j <= i; j++) { // 内层循环
if (i > 4) { // 判断i的值是否大于4
break; // 跳出外层循环
}
System.out.print("*"); // 打印*
}
System.out.print("\n"); // 换行
}
}
}
2.continue语句
continue语句用在循环语句中,它的作用是终止本次循环,执行下一次循环。
接下来通过对1~100之内的奇数求和演示continue的用法。
public class Example18 {
public static void main(String[] args) {
int sum = 0; // 定义变量sum,用于记住和
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) { // i是一个偶数,不累加
continue; // 结束本次循环
}
sum += i; // 实现sum和i的累加
}
System.out.println("sum = " + sum);
}
}
上述代码使用for循环让变量i的值在1~100之间循环,在循环过程中,当i的值为偶数时,执行continue语句结束本次循环,进行下一次循环;当i的值为奇数时,sum和i进行累加,最终得到1~100之间所有奇数的和,打印“sum = 2500”。