循环语句则是根据条件要求程序反复执行某些语句,直到条件不满足为止。Java中的循环语句分为三种:for语句、while语句和do-while语句。
1. for语句
for语句一般适用于明确知道重复执行次数的循环情况,其语法格式如下:
for([初始化表达式];[条件表达式];[迭代表达式]){ 循环体 } |
其中,初始化表达式只在循环开始之前执行一次;初始化表达式、条件表达式和迭代表达式可以省略,但是分号不能省略,当三者都省略时将称为一个死循环;在初始化表达式和迭代表达式中可以使用逗号隔开多个语句。for语句首先执行初始化表达式,然后计算条件表达式的取值;如果条件表达式的值为true,则先执行循环体中的语句,然后接着执行迭代表达式,完成一次循环,进入下一次循环;如果条件表达式的值为false,则终止循环。for语句的程序控制结构如图1所示。
图1. for语句结构
【例1】编写一个程序,计算从1累加到n,n为一个大于1的整数。
代码如下:
public class ForDemo {
public static int sum(int n) {
int sum=0;
//计算从1到n的和
for(int i=1;i<=n;i++) {
sum+=i;
}
return sum;
}
public static void main(String[] args) {
System.out.println("从1到100到和为:"+sum(100));
System.out.println("从1到500到和为:"+sum(500));
}
}
2. while语句
while语句的语法格式如下:
while(条件表达式){ 循环体 } |
while语句首先计算条件表达式的取值,如果条件表达式的值为true,则执行循环体内的语句,在进入下一次循环;如果条件表达式的值为false,则终止循环。while语句的程序控制结构如图2所示。
图2. while语句结构
【例2】编写一个程序,利用辗转相除法求两个正整数a和b的最大公约数(a, b)。最大公约数是指多个整数共有约数中最大的一个。例如,12,16的公约数有1、2、4,其中最大的一个是4,因此,4是12与16的最大公约数,即(12,16)=4。
下面以a=12和b=16为例来说明利用辗转相除法算法求最大公约数的步骤:
① 12除以16的余数12,因为12不等于0,所以(12,16)=(16,12)
② 16除以12的余数为4,因为4不等于0,所以,(16,12)=(12,4)
③ 12除以4的余数为0,所以(12,4)=4
所以,(12,16)=4。
代码如下:
public class WhileDemo {
//求a和b的最大公约数
public static int mcd(int a,int b) {
int m=a%b;
while(m!=0) {
a=b;
b=m;
m=a%b;
}
return b;
}
public static void main(String[] args) {
System.out.println("12和16的最大公约数为:"+mcd(12,16));
System.out.println("36和24的最大公约数为:"+mcd(36,24));
System.out.println("36和13的最大公约数为:"+mcd(36,13));
System.out.println("36和12的最大公约数为:"+mcd(36,12));
}
}
3. do-while语句
while语句先判断再循环,而do-while语句则是先循环再判断,其语法格式如下:
do{ 循环体 }while(条件表达式); |
do-while语句首先执行一次循环体,然后再计算条件表达式的取值,如果条件表达式的值为true,则进入下一次循环;如果条件表达式的值为false,则终止循环。do-while循环语句的程序控制结构如图3所示。
图3. do-while语句结构
【例3】编写一个程序,确定满足1+1/2+1/3+...+1/n >10的最小整数n。
代码如下:
public class doWhileDemo {
public static void main(String[] args) {
int n=0;
double sum=0;
do{
n+=1;
sum+=1.0/n;
}while(sum<=10);
System.out.println("最小整数n为:"+n);
}
}
4. 循环语句嵌套
当循环语句的循环体中又出现循环语句时,称为循环嵌套或多重循环。例如,for循环嵌套、while循环嵌套,当然也可以使用混合嵌套。下面通过具体实例来说明循环语句嵌套的使用方法。
【例4】编写一个程序,输出九九乘法表。
public class NestedLoopDemo1 {
public static void main(String[] args) {
for(int i=1;i<=9;i++) {//外层循环
for(int j=1;j<=9;j++) {//内层循环
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();//换行
}
}
}