循环结构
计算机除了擅长判断外,更多的时候会执行一些循环语句,计算机对这些重复的循环语句的执行非常擅长,java提供了三种基本的循环语句,下面一一详细介绍:
一、while循环语句
while循环语句,它的条件判断表达式只有一个,通过判断条件为true时执行循环体代码块,为false时退出循环。其语法格式如下:
while (判断条件)
{
// 语句
}
循环开始前,程序会先执行判断条件里面的代码,只要返回true就会进入后面的语句块,和if判断一样,如果后面只有一个语句那么左右大括号可以省略,但是为了提高程序的可读性,建立还是写上大括号。
下面我们具几个简单的示例说明while的使用,比如我们要输出十句hello world语句。当然我们不用写10局输出语句,可以参考下面的代码:
int i=0;//初始化 i为0 while(i<10){//进入循环前先判断条件是否为true System.out.println("hello world!"); i++;//每一次循环结束前i自增1 } System.out.println("while循环结束了。i="+i);
使用循环语句我们可以轻松的实现输出10句hello world的程序,注意上面的代码,在循环开始前我们就定义了一个变量i用户控制循环的次数,初始化为0,每一次进入while循环体之前,都会先判断i是否小于10,如果小于10才会进入循环体,在循环体里,我们让i自增1,也就是说每输出已经hello world后,i都会自增1,然后再次回到while循环的判断条件中,再次判断,一直i自增到10的时候,该条件就会返回为false,退出while循环。
二、do-while语句
do-while语句和while循环非常类似,都是while后面的条件判断为true时才会继续循环,所以很多时候两者实现的效果都是一样的,不过,也是有区别的,其区别在于判断表达式执行判断的时间点不一样,do-while语句是先进行执行一遍语句后再执行的判断,这样至少保证循环体代码块执行了一遍,而while 语句是先判断再执行的,如果条件表达式一开始就不成立的话那么循环体代码块就一次也不会被执行。因此有时使用do-while语句是逻辑上必须的。其具体的语法格式如下:
do {
// 语句
}while (判断条件);
上面的格式需要注意的是后面别忘了要添加一个分号(;),我们也可是使用do-while语句实现上面的输出十句hello world语句的程序,代码如下:
int i=0;//初始化 i为0 do{ System.out.println("hello world"); i++; }while(i<10); System.out.println("while循环结束了。i="+i );
运行结果与使用while循环一样,我们再尝试一下把i改成20,其代码如下:
int i=20;//初始化 i为0 do{ System.out.println("hello world"); i++; }while(i<10); System.out.println("while循环结束了。i="+i );
程序输出了一句hello world后,i自增后就是21了,这个时候条件判断就已经是false,所以程序最后也只输出了一句hello world就退出该循环了。我们也可以使用while循环测试一下,代码如下:
int i=20;//初始化 i为0 while(i<10){//进入循环前先判断条件是否为true System.out.println("hello world!"); i++;//每一次循环结束前i自增1 } System.out.println("while循环结束了。i="+i);
一句hello world语句都没有输出,因为以开始条件就已经是false了,所以循环体一次也没有进入过。这样你能明白while循环和do-while循环之间的使用上的区别了吧。
三、for循环语句
在while循环和do-while循环中我们都使用整型变量i来控制循环次数,每一次执行循环前都需要判断是否满足循环条件,在循环体重都需要让变量i自增,像这种相对明确循环次数,并且频繁使用一个变量来控制循环,java提供了更加简洁,结构根据清晰的循环,就是下面for循环语句,标准的for循环语句分为三段表达式。其具体格式如下:
for(初始化;测试; 增量){
操作语句;
}
我们先看看示例,再详细讲解for的格式,还是实现上面所说的输出10句hello world语句。
for(int i=0;i<10;i++){ System.out.println("hello world!"); } System.out.println("循环结束了。");
在for后面的小括号一样要包含三句语句,每一个语句的内容不是必须的,但是分号(;)是不可以缺少的。三句语句中第一句是一个表达式,用作声明并初始化,只会执行一次,初始化的通常是一个变量,这个变量作用域循环体内部。当然同时初始化多个变量也是语法所允许的,只是通常没这种必要,比如:
for(int i=0,j=20;i<50;i++){
…
}
第二句负责在每次循环执行之前进行判断,判断返回一个boolean值,根据这个boolean值决定是否继续执行循环,true继续执行,false终止循环。
第三句可以是任意java表达式,而最常见的用法是进行一个递增或者递减的运算,运算的值用于第二个表达式中进行循环控制判断。
每一句都不是必须的,所以最简单的for循环语句就是
for(;;){
...
}
就算没有语句也要写上分号。
for循环控制的{…}大括号内被称为循环体,这段语句块是每次循环时都执行的代码逻辑。下面我们再具几个常见的例子说明以下for循环的应用。比如我们要计算1至100累加的和是多少,当实现这个功能有很多方法,这里我们使用for循环实现它,代码如下:
int sum=0; for(int i=1;i<=100;i++){ sum+=i;//实现累加 } System.out.println("sum="+sum);
我们一开始定义了一个变量sum并初始化为0,用于记录运算的结果。sum的作用域不再for循环体里,然后我们使用for循环开始求和,首先我们先写for循环的控制头,在第一句中我们初始化一个整型变量i,该i的作用域仅在循环里使用
int i=0;
然后我们就写循环的条件判断了i必须要小于等100,才能继续进入循环体。
i<=100;
如果条件满足,程序其实就会进入循环体内,执行累加的功能。
sum+=i;//实现累加
循环体执行完毕才会进入循环控制头的第三句代码,这里就是让i自增1。
i++;
程序就是这样不断的循环下去,一至到条件判断为false为止。最后就会退出该循环并输出最后的结果:sum=5050