Java/循环结构
顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,甚至您也不清楚应该是多少次——它依情况而定,那么您需要在程序中使用循环结构。
Java中有三种主要的循环结构:while,do...while,for。
while
[编辑]while是最基本的循环,它的结构为:
while( 判断条件 ) { 循环内容 }
当执行到while语句时,会首先判断括号中的条件是否满足(真/假),若真,则进入循环;反之则跳过循环。进入循环后,会一直执行循环内容。执行结束后返回,再次判断括号中的条件,决定是否再次进入循环,如此往复……直到括号中的条件为假,跳出循环为止。
括号中的判断条件,可以是布尔值或者布尔表达式,甚至数字(0代表false,而正数代表true,这种用法在Java中并不常见)。
package wikibooks;
public class Exercise {
public static void main(String args[]){
int num = 1;
while( num < 3 ){ //判断是否进入循环
System.out.println( "num=" + num + "<3,不能跳出循环" );
num++;
}
System.out.println( "num=" + num + ">=3,跳出循环" );
}
}
执行结果:
num=1<3,不能跳出循环 num=2<3,不能跳出循环 num=3>=3,跳出循环
有一种特殊的循环叫做“无限循环”或者“死循环”,跳出循环的条件永远无法满足。如:
package wikibooks;
public class Exercise {
public static void main(String args[]){
while( true ){
System.out.println( "不断重复\n直到永远");
}
}
}
执行结果:
不断重复 直到永远 不断重复 直到永远 ...
这种情况一般被认为是危险的,因为程序不能停止。但我们有时会用到while(true)这样的用法,并利用其它方法跳出循环。(参见后面的break和continue)
do...while
[编辑]对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
比如我们想知道一个维基人的身体是否达到体育标准,我们不能直接判断。我们需要让他进行锻炼,然后进行体质测试,这之后进行判断。如果合格,则不再进行测试;反之,则此维基人将继续进行体育锻炼,再次测试。如此循环。
此过程可概括为先执行,后判断。do...while即此种用法。
do{ 体育锻炼; 体质测试; }while(!测试结果);
package wikibooks;
public class Exercise {
public static void main(String args[]){
double guess;
do{
guess = Math.random(); //给guess一个0-1之间的随机数值
System.out.println( guess );
}while( guess > 0.1 ); //判断guess是否大于0.1
}
}
由于guess是随机数,程序执行的结果是不确定的。其中一次执行的结果是:
0.4478991576615713 0.9647035938994791 0.645764446922368 0.6285696297572023 0.08508127031573565
for
[编辑]虽然所有循环结构都可以用while或者do...while表示,Java提供了另一种语句——for,使一些循环结构变得更加简单。
for循环的基本结构为
for(初始化语句; 进入循环条件; 循环末执行语句) { 循环内容 }
for循环极其适用于那些限定循环次数的循环结构。一种常用的形式如:
package wikibooks;
public class Exercise {
public static void main(String args[]){
int i;
for( i = 0; i < 5; i++ ){
System.out.println( i );
}
}
}
执行到for语句时,首先i被赋值为0;然后判断进入循环条件 i < 5,满足则进入循环;执行完循环体之后,执行循环末语句i++;再次判断进入循环条件……
执行结果:
0 1 2 3 4
理论上,for语句也可以实现while语句的所有功能——将括号中第一和第三部分留空,则while和for循环就完全一致了。但在使用时,根据需要灵活使用,会更方便。在不知道从第几个版本开始,for语句开始支持对foreach的支持。一般的形式如下:
int[] data = {1, 2, 3, 4, 5};
for(int t : data){
System.out.println(t);
}
执行结果:
1 2 3 4 5
以上代码中的for遍历了data中的所有数据,每次将数据存储在局部变量t中并运行一次循环块。在Java中,所有的数组均可以用该形式的for循环。另外,实现了java.lang.Iterable<T>接口的类,也可以使用该for循环,比如java.util.Collection。