顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,,就需要使用循环结构。
循环是程序中的重要流程结构之一。循环语句能够使程序代码重复执行,适用于需要重复一段代码直到满足特定条件为止的情况。
所有流行的编程语言中都有循环语句。Java 中采用的循环语句与C语言中的循环语句相似,主要有 while、do-while 和 for。另外 Java 5 之后推出了 for-each 循环语句,for-each 循环是 for 循环的变形,它是专门为集合遍历而设计的。for-each 并不是一个关键字。
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体。当反复执行这个循环体时,需要在合适的时候把循环条件改为假,从而结束循环,否则循环将一直执行下去,形成死循环。
循环语句可能包含如下 4 个部分。
- 初始化语句(init statement): 一条或多条语句,这些语句用于完成一些初始化工作,初始化语句在循环开始之前执行。
- 循环条件(test_expression):这是一个 boolean 表达式,这个表达式能决定是否执行循环体。
- 循环体(body_statement):这个部分是循环的主体,如果循环条件允许,这个代码块将被重复执行。如果这个代码块只有一行语句,则这个代码块的花括号是可以省略的。
- 迭代语句(iteration_statement):这个部分在一次循环体执行结束后,对循环条件求值之前执行,通常用于控制循环条件中的变量,使得循环在合适的时候结束。
上面 4 个部分只是一般性的分类,并不是每个循环中都非常清晰地分出了这 4 个部分。
while 循环
特点:先判断,后执行。
while是最基本的循环,它的结构为:
while( 布尔表达式 ) {
//循环内容
}
其中语句块中的代码可以是一条或者多条语句,而条件布尔表达式是一个有效的 boolean 表达式,它决定了是否执行循环体。当条件表达式的值为 true 时,就执行大括号中的语句块。
只要布尔表达式为 true,循环就会一直执行下去。
执行完毕,再次检查表达式是否为 true,如果还为 true,则再次执行大括号中的代码,否则就跳出循环,执行 while 循环之后的代码。
例1:
1+2+。。。+100,求和?
public class YuFa14 {
public static void main(String[] args) {
int i=1;
int count=0;
while(i<=100){
count=count+i;
i++;
}
System.out.println("1到100之间的和为:"+count);
}
}
在上述代码中,定义了两个变量 i 和 count,循环每执行一次 i 值就加 1,判断 i 的值是否小于等于 100,并利用 count=count+i语句来实现累加。当 i 的值大于 100 之后,循环便不再执行并退出循环。
例2:
计算1000以内奇数及偶数的和,并输出。
public class YuFa15 {
public static void main(String[] args) {
int i=1;
int sum1=0;
int sum2=0;
while(i<=1000){
if(i%2==0){
sum1+=i;
}else{
sum2+=i;
}
i++;
}
System.out.println("1到1000之间的偶数和为:"+sum1);
System.out.println("1到1000之间的奇数和为:"+sum2);
}
}
例3:
输出1到1000间能被5整除的数,且每行输出5个。
public class YuFa16 {
public static void main(String[] args) {
int h=0;
int i=1;
while(i<=1000){
if(i%5==0){
System.out.print(i + "\t");
h++;
}
i++;
//换行
if(h==5){
System.out.println();
h = 0;
}
}
}
}
do…while 循环
特点:先执行,后判断。
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
do…while 语句的语法格式如下:
do {
//代码语句
}while(布尔表达式);
注意:布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。
其运行流程如图所示。
例4:
public class YuFa17 {
public static void main(String[] args) {
int x = 10;
do{
System.out.print("value of x : " + x );
x++;
System.out.print("\n");
}while( x < 20 );
}
}
while和do-while的比较
while 循环和 do-while 循环的相同处是:都是循环结构,使用 while(循环条件) 表示循环条件,使用大括号将循环操作括起来。
while 循环和 do-while 循环的不同处如下:
- 语法不同:与 while 循环相比,do-while 循环将 while 关键字和循环条件放在后面,而且前面多了 do 关键字,后面多了一个分号。
- 执行次序不同:while 循环先判断,再执行。do-while 循环先执行,再判断。
- 一开始循环条件就不满足的情况下,while 循环一次都不会执行,do-while 循环则不管什么情况下都至少执行一次。
例5:
产生随机数(1-100),当随机数是88的时候,我们就停止,并且计算产生了几次循环!
/**
* 生成 0-100 随机数,直到生成 88 为止,停止循环!
* @豆皮没有豆
*/
public class YuFa18 {
public static void main(String[] args) {
int count=0;//用于计数,循环的次数
while(true) {
count++;//循环一次,计数器加一
int i=(int)(100*Math.random());//随机生成0-100的数
if(i==88) {
break;
}
}
System.out.println("产生了" +count+"次循环!");
}
}