51.Java循环
循环语句的功能是在循环条件满足的情况下,反复执行一段代码,直到不再满足循环条件为止。
这个类型的工作恐怕是现在计算机最适合去做的事情之一了。无论哪个人在勤恳,重复做同样一件事情总是会新生倦怠的,这是谁也避免不了的。并且还不能保证重复做得每一次都是保证同样的质量和结果。
但是计算机就不同了,或者说机器就是不同了,它们非常适合做这类重复性的活动。
循环语句一般由下述四部分组成:
初始化部分(init_statement):一条或多条语句,用来做一些初始化工作,例如设置计数器初值等;
循环条件部分(test_exp):这是一个boolean类型的表达式,根据它的值来判断是否继续进行下一次循环;
循环体部分(body_statement):将被循环执行的目标代码,可以是一条语句,也可以是一个语句块;
迭代部分(alter_statement):在一次循环结束后,下一次循环开始前执行的语句,通常用于修改循环计数器的值。
循环语句使语句或块的执行得以重复进行。
Java编程语言支持三种循环构造类型:for, while和do while。三种循环结构均通过一个条件表达式来控制。
在while()和for()结构中,条件判断均先于语句块执行,所以,有可能语句块一次也不执行。
在do…while()中,语句块先于条件判断,所以,语句块至少执行一次。
这里先来看for循环的使用。
for语句的基本格式如下:
for ( init_expr ; boolean test_expr ; alter_expr){
statement or block;
}
其中:init_expr表示初始化代码,而test_expr是用于条件判断的表达式,如果表达式的值为true,则执行后面的语句,接下来进行后面的步进代码alter_expr。如果条件判断表达式test_expr第一次求值就为false,那么for循环不会进行任何的迭代,后面的statement也不会进行任何的操作。
程序执行遇到for语句时,首先执行初始化部分(init_statement)的语句,然后计算循环条件表达式test_exp的值,如为true,则执行循环体部分的语句(body_statement),否则结束循环。
一次循环结束后,下一次循环开始前,执行迭代部分的语句(alter_statement),然后判断循环条件表达式test_exp的值,决定是否进行下一次循环。
请看下面这个for循环的例子:
int result = 1;
for (int k = 5;k>1;k--) {
result = result * k;
}
上面这个程序片断的作用是实现一个简单的阶乘运算:n*(n-1)*(n-2)*…*1,在这里,n的值为5,因此,它运算的结果是5*(5-1)*(5-2)*(5-3)*(5-4)=5*4*3*2*1=120。
上面的例子中,init_expr只有一个初始化的值,条件判断表达式也只有一个条件,步进代码也是每次递减一个数字。但是,其实Java允许在for语句的循环控制的各个部分放置任何表达式,如下例:
for(int b = 0,s = 0,p = 0;(b<10)&&(s<4)&&(p<10);p++){
//代码块
//更新b和s 的值
}
在这个例子中,初始化的变量有三个,但是,只能有一个声明语句,所以,如果需要在初始化表达式init_expr中声明多个变量,那么这些变量必须是同一种数据类型的。
for循环并没有限制在它的for语句的每一部分都必须提供一个表达式,这三个部分其实都可以为空,此时,是一个无限的循环。这在语法上是没有错误的,只是这种循环在实际应用中会引起很多的问题,我们应该避免这种会引起无限循环的for语句。
下面来看一个例子,来了解一下for语句中各部分为空时的控制情况:
int sum=0;
//注意看这个for语句,它的步进部分是空的
for (int i=1;i<=n;){
sum=sum+i;
//将步进放到了for程序块中
i++;
}
注意这个for语句,它的步进部分是空的,我们将这个步进运算放到了程序块中。
一个无限for循环的例子如下:
for(;;){
//程序块
}
这种情况一般是要避免的,我们不应该让程序出现这种无限循环的情况。
在for语句内定义的变量,它的作用范围仅限于for语句块、表达式以及for子句的语句部分。在for循环终止后,它们将不可被访问。如果需要在for循环外部使用循环计数器的值,可以将这个变量定义在for循环体外,如下:
int k;
for(k = 0;k<10;k++){
//statements
}
//此时可以再使用变量k
另外,如果变量定义在for循环体内,则在另外一个循环体中还可以使用相同的变量名称,如下:
for(int k=0;k<10;k++) {
… …
}
for(int k = 100;k>0;k--) {
… …
}
上面的代码段是合法的。
while循环语句的格式:
init_statement
while ( boolean_expr ){
statement or block;
alter_expr;
}
while语句首先测试boolean_expr表达式的值,如果为true,则运行代码块中的程序,并且一般需要进行迭代运算,以改变boolean_expr表达式中的变量的值,直到表达式中的值变为false。
如果刚开始条件表达式就为false,则while循环永远也不会被执行。
来看一个while循环的例子:
… …
//while循环
int result1=0;
int result2=0;
//初始化一个变量
int i=1;
//利用这个变量构成一个条件表达式
while(i<=10) {
result1=result1+i;
//将i加1
i=i+1;
}
System.out.println("After the While Loop,the result1 is:"+result1);
… …
for循环和while循环是等价的,我们可以将如下的for循环:
for(init_expr;test_expr;alter_expr){
statements;
}
改写成如下的while循环方式:
init_expr;
while(test_expr){
statements;
alter_expr;
}
这两种方式是完全可以相互替换的。for循环和其他两个循环控制语句不同的地方在于,它可以在控制表达式中定义变量,而while/do…while不能这样做。
上一篇: 在各种数据库中如何限制检索行数?
下一篇: HTML5中对id属性的定义与规定