循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环结构是程序中非常重要和基本的一种结构,它是由循环语句来实现的。Java的循环语句共有3种:while语句、do-while语句和for语句。
1. while语句
while语句的一般语法格式如下:
while(条件表达式)循环体
其执行过程可表示为下图所示:

其中条件表达式的返回值为布尔型,循环体可以是单个语句,也可以是复合语句块。
while语句的执行过程是先判断条件表达式的值,若为真则执行循环体,循环体执行完之后再无条件转向条件表达式再做计算与判断;当计算出条件表达式为假时,跳过循环体执行while语句后面的语句。下面是一个使用while语句的任务:
找出所有的水仙花数并输出。
public class Narcissus{
public static void main(String args[]){
int i,j,k,n=100,m=1;
while(n<1000){
i = n/100;j = (n-i*100)/10;k = n%10;
if((Math.pow(i,3) + Math.pow(j,3) + Math.pow(k,3)) == n)
System.out.println("找到第"+ m++ + "个水仙花数:" + n);
n++;
}
}
}
其功能是找出所有的水仙花数并输出。水仙花数是三位数,它的各位数字的立方和等于这个三位数本身,例如371=33+73+13,则371就是一个水仙花数。程序中定义了一个while循环,每轮循环检查100~999中的一个三位数n,取出n的个位、十位和百位数分别存入k、j、i三个整型变量;利用系统定义好的方法Math.pow()计算i、j、k的三次方并相加,若所得的和等于n,则输出这个水仙花数;否则n加1检查下一个三位数。循环结束时所有的三位数都将被检查到。运行结果如图所示。

2. do-while语句
do-while语句的一般语法结构如下:
do
循环体
while(条件表达式);
其执行过程可表示为下图所示:

do-while语句的使用与while语句很类似,不同的是它不像while语句是先计算条件表达式的值,而是无条件地先执行一遍循环体,再来判断条件表达式。若表达式的值为真,则再运行循环体,否则跳出do-while循环,执行下面的语句。可以看出,do-while语句的特点是它的循环体将至少被执行一次。下面是使用do-while语句的任务。
import java.io.*;
public class showCharValue{
public static void main(String args[]){
char ch;
try{
System.out.println("请输入一个字符,以'#'结束");
do{
ch=(char)System.in.read();
System.out.println("字符"+ch+"的整数值为"+(int)ch);
System.in.skip(2);//跳过回车键
}while(ch!='#');
}catch(IOException e){System.err.println(e.toString());}
}
}
运行结果如图所示。

3 . for语句
for语句是Java语言三个循环语句中功能较强、使用较广泛的一个。for语句的一般语法格式如下:
for(表达式1;表达式2;表达式3)循环体
其中表达式2是返回布尔值的条件表达式,用来判断循环是否继续;表达式1完成初始化循环变量和其他变量的工作;表达式3用来修整循环变量,改变循环条件,三个表达式之间用分号隔开。
for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作;再判断表达式2的值,若为真,则执行循环体,执行完循环体后再返回表达式3,计算并修改循环条件,这样一轮循环就结束了。第二轮循环从计算并判断表达式2开始,若表达式的值仍为真,则继续循环,否则跳出整个for语句执行下面的句子。for语句的三个表达式都可以为空,但若表达式2也为空,则表示当前循环是一个无限循环,需要在循环体中书写另外的跳转语句终止循环。
其执行过程可表示为下图所示:

找出10000之内的所有完全数。
public class PerFectNum{
public static void main(String args[]){
int count=1;
for(int i=1;i<10000;i++){
int y=0;
for(int j=1;j<i;j++)
if(i%j==0)y+=j;
if(y==i){
System.out.print(i+String.valueOf('\t'));count++;
if(count%3==0)System.out.println();
}
}}}
其功能是输出10000之内的所有完全数。完全数是指等于其所有因子和(包括1但不包括这个数本身)的数。例如6=1×2×3,6=1+2+3,则6是一个完全数。for循环检查1到9 999之间的所有整数是否是完全数。每轮循环检查一个数i是否是完全数。嵌套在大循环中的小循环,用来求出数i的因子和。如果i等于这个因子和,则i为完全数则输出它。变量count用来计算所求得的完全数个数。最后使得每输出两个完全数后加入一个换行。运行结果如图:
