循环结构

来源:互联网 发布:eclipse java开发教程 编辑:程序博客网 时间:2024/05/16 14:08
循环结构可以在满足循环条件的情况下,反复执行某一段代码。循环语句可能会包含如下四个部分:
初始化语句(init_statements):一条或多条语句,这些代码用于完成一些初始化工作,初始化语句在循环开始之前执行。
循环条件(test_expression):这个一个boolean表达式,这个表达式决定是否执行循环体
循环体(body_statements):这个部分是循环的主体,如果循环条件允许,这个代码就重复执行。
迭代语句(iteration_statements):这个部分在一次循环体执行结束之后,对循环条件求值之前执行,通常用于控制循环条件中的变量
,使得循环在合适的时候结束。
上面四个部分是一般分类,并不是每个循环中都非常清晰地分出了上面四个成分。
1.3.1 while循环语句
while(test_expression){
statements;
}
while循环可以当成一个条件语句,只有条件为true时才会执行,如果条件一开始就是false,那么循环体部分将

永远不会执行 。所以说使用while循环的时候一定要保证循环条件有变成false的时候,否则就是死循环。

下面看一段代码:

/** * 给while条件表达式后跟一个分号 */private static void asd() {int count = 0;while (count < 10);//表示是一个空语句,空语句也就意味着进入了一个死循环//下面只是一个代码块和上面没有任何关系,因为上面陷入了死循环,那么下面的代码块无法得到执行{System.out.println(count);count++;}}


1.3.2 do while循环语句
do{
statements;
}while(test_expression);
do while 循环与while循环的区别在于:while循环是先判断条件,条件为true才会执行。而do while循环
则先执行循环体,然后再判断循环条件,如果循环条件为true,则执行下一次循环,否则终止循环。 也就是说
do while循环即使循环条件为false也会执行一次循环,即至少会执行一次循环。
1.3.3 for循环
for循环是更加简洁的循环语句,大部分情况下,for循环可以替代while循环、do while循环。
for([init_statements];[test_expression];[iteration_statements]){
statements;
}
for循环先执行初始化语句init_statements,初始化语句只在循环开始之前执行一次。每次执行循环体之前,
先计算test_expression循环条件的值,如果循环条件为true,则执行循环体部分,循环体执行结束之后再执行
循环迭代语句。因此,对于for循环,循环条件总比循环体多执行一次,因为最后一次循环条件为false,将不再
执行循环体。
for(int count =0 ; count < 10 ; count++){
System.out.println(count);
}
在上面的循环语句中,for循环的初始化语句只有一个,循环条件也只是一个简单的boolean表达式。实际上,for循环

允许同时指定多个初始化语句,循环条件也可以使一个包含逻辑运算符的表达式,例如如下程序:


// 同时定义了三个初始化变量,使用&&来组合多个boolean表达式for (int b = 0, s = 0, p = 0; b < 10 && s < 4 && p < 10; p++) {System.out.println(b++);}

使用for循环同时需要注意不要陷入死循环。
运用for循环时,可以把初始化语句定义在循环体之外,把循环迭代语句放在循环体内,这种做法就非常类似于
前面的while循环了。如下例:

// 把for循环的初始化语句提出来单独定义int count = 0;// for循环里只放条件for (; count < 10;) {// 如果循环体部分使用continue来结束本次循环,将会导致循环迭代语句得不到执行// if(count == 9){// continue;// }System.out.println(count);// 把循环迭代部分放在循环体之后定义count++;}

把for循环的初始化语句放在循环体之前定义还有一个作用,可以扩大初始化语句中所定义的变量的作用域。for循环
里定义的变量,其作用域仅在该循环体内有效,for循环终止之后,这些变量将不可被访问。如果需要在for循环以外
的地方使用这些变量的值,就可以采用上面的做法。除此之外,还有一个做法也可以满足这种要求,额外定义一个
变量来保存这个循环变量的值。 如下例:

int temp = 0;for (int i = 0; i < 10; i++) {System.out.println(i);// 使用temp来保存变量的值temp = i;}
建议使用变量temp来保存变量的值这种方法。同时选择循环变量时,习惯选择i、j、k来作为循环变量。


1.4 控制循环结构

1.4.1 使用break结束循环
在某些时候,我们需要在某种条件出现时,强行终止结束循环,而不是等到循环条件为false的时候。此时可以
用break来完成这个功能。break用于完全结束一个循环,跳出循环体。不管是哪种循环,只要碰到break,系统将会
完全结束该循环,开始执行循环之后的代码。

break语句不仅可以结束其所在的循环,还可以结束其外层循环,此时需要在break后紧跟一个标签,这个标签
用于标识一个外层循环。
java中的标签就是一个紧跟着英文冒号(:)的标识符。与其他语言不同的是,java中的标签只有放在循环语句
之前才有作用。例如下例:

// 外层循环 out作为标识out: for (int i = 0; i < 10; i++) {// 内层循环for (int j = 0; j < 5; j++) {System.out.println("i的值:" + i + ",j的值:" + j);if (j == 3) {// 跳出out标签所标识的循环break out;}}}

值得指出的是,break后标签必须是一个有效的标签,即这个标签必须在break语句所在的循环之前定义,或者
在其所在的循环的外层循环之前定义。当然,如果把这个标签放在break语句所在的循环之前定义,也就失去了标签
的意义,因为break默认就是结束其所在的循环。

1.4.2 使用continue结束本次循环
continue的功能和break有点类似,区别是continue只是终止本次循环,接着开始下一次循环。而break则是完全
终止循环。可以理解为continue的作用是略过当次循环中剩下的语句,重新开始新的循环。 如下例:

for (int i = 0; i < 3; i++) {System.out.println("i的值:" + i);if (i == 1) {// 略过本次循环剩下的语句continue;}System.out.println("continue剩下的语句");}

与break类似,continue也可以紧跟一个标签,用于直接结束标签所标识循环的当次循环,重新开始下次循环
如下例:

out: for (int i = 0; i < 5; i++) {// 内层循环for (int j = 0; j < 3; j++) {System.out.println("i的值:" + i + ",j的值:" + j);if (j == 1) {// 跳出out标签所指定的循环continue out;}}}

从上面程序可以看到,循环变量的值将无法超过1,因为每当j等于1的时候,continue out语句就结束了外层
循环的当次循环,直接开始下一次循环,内层循环没有机会执行完成。
与break类似的是,continue后的标签必须是一个有效标签,即这个标签应该放在continue所在循环的外层
循环之前定义。

1.4.2 使用return结束方法

return关键字并不是专门跳出循环的,return的功能是结束一个方法。当一个方法执行到一个return语句时
,这个方法将被结束。
与continue和break不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。






0 0
原创粉丝点击