(并不是每个循环都非常清晰的分出了这四个部分)
1、初始化语句(init_statement)一条或多条语句,再循环之前执行,用于完成一些初始化工作。
2、循环条件(test_expression)一个用于决定是否执行循环体的Boolean表达式。
3、循环体(boy_statement)循环的主体,若只有一行语句可省略花括号{}。(但为了保证代码的可读性最好保留花括号)
4、迭代语句(iteration_statement)一次循环体执行结束之后,循环条件求值之前执行。通常用于控制循环条件中的变量。
while语法格式
[init_statement]//初始化语句
while(test_expression){//循环条件
statement;
[iteration_statement]//迭代语句
}
while循环的的注意事项:
1、如果while循环的循环体部分和迭代语句合并在一起可省略花括号,如果省略了循环体的花括号,那么while的循环条件紧控指到紧跟该循环条件的第一个分号处。
public class WhileTest {
public static void main(String[] args){
int count = 0;
int s = 0;
while (count <10)
s=count++ + 3;//先计算count +3后再加1 循环体与迭代语句合并
System.out.println(s);//结果只输出了一次12,即未参与while循环 在循环结束后执行输出
}
}
2、一定要保证循环条件存在false时候,否则死循环。
int count = 0;
while (count<10){
System.out.println("死循环"+count);
count--;//count的值越来越小
}
3、空语句
int count = 0;
while (count < 10);//习惯性的加分号,一个分号也是一个语句即空语句所以while循环在这里陷入死循环
//分号后面的代码块与while循环无关系
System.out.println("-----" + count);
count++;
}
do while 循环与while循环不同的是do while循环先执行循环体 在判断执行条件,即do while循环的循环体至少执行一次。
public class DoWhileTest{
public static void main(String[] args){
//定义一个量
int count = 1;
//执行do while循环
do{
System.out.println(count);
count++;
}
while(count <10);
System.out.println("循环结束");
}
for循环比较简洁,大部分情况下可以代替while、do while循环,for循环的执行条件总比循环体多执行一次,即当执行条件语句返回false时不再执行循环体。
值得注意的是for循环的循环体并未与迭代语句放在一起,与while、dowhile不同,即使在执行循环体是遇到了continue语句结束了本次循环,迭代语句也会执行。
for循环允许同时指定多个初始化语句,循环条件也可以是一个包含逻辑运算符的表达式。
建议不要再循环体内修改循环变量,因为容易出错,如下
public class Fortest{
public static void main(String[] args){
for(int count = 0;count <10;count++) {
System.out.print(count);
//循环体内修改循环变量count
count*0.1;
}
System.out.print("循环结束");
}
}
如果真的需要访问、修改循环变量的值,建议重新的定义一个临时变量将循环变量的值赋值给临时变量,然后对临时变量的值修改。
for循环的圆括号中的两个分号是必需的,初始化语句、循环条件、迭代语句都可以省略,则此时循环条件默认为true即死循环
public class DataForTest{
public static void main(String[] args){
//省略掉三个部分
for( ;;){
//一直输出字符串aaaaaa
System.out.println("aaaaaa");
}
}
}
for循环的初始化语句(例如int i = 0;)也可以定义在循环体外,不过这将扩大初始化语句的作用域,后果是若该方法还有其他的循环则不能在使用该语句中的循环变量i。
for循环内定义的变量其做用于仅为该循环内,若想是在循环外再使用可以这样做
int tmp = 0;
for(int i = 0; i< 10; i++)}{
System.out.println(i);
//使用tmp保存i的值
tmp = i;
}
System.out.println("循环结束");
嵌套循环就是将内部循环当做外部循环的循环体。只有内部循环条件为false时,才能跳出内层循环结束这一次的外循环进入下一次的外层循环。
Java中提供了continue和break来控制循环结构,return的方法可以结束整个方法。
1、break
break是直接完全结束一个循环,跳出循环体。若是嵌套循环则可以使用标签来标识是结束整个外循环。如下
public class BreakTest{
public static void main(String[] args){
outer:
for (int i = 0;i < 5;i++){
for (int j = 0;j <3;i++){
System.out.println("i的值为"+i+"j的值为"+j);
if(j==1){
//跳出outer标签标识的循环
break outer;
}
}
}
}
}
运行结果:
i的值为0 j的值为0
i的值为0 j的值为1
2、continue
continue只是忽略本次循环剩下的语句,接着开始下一次的循环;break是完全终止此循环
public class Continue{
public static void main(String[] args){
for(int i = 0;i<3;i++){
System.out.println("i的值为"+i);
if(i==1){
//忽略本次循环省略的语句
continue;
}
System.out.println("continue后的输出语句");
}
}
运行结果:
i的值为 0
continue后的输出语句
i的值为 1
i的值为 2
continue后的输出语句
continue也可以使用标签,当使用continue用标签标注嵌套循环的外层循环时,结束的是本次外层循环。开始下一次外层循环。
public class CountinueTest2{
public static void main(String[] args){
//外层循环
outer:
for (int i = 0;i < 5;i++){
for(int j = 0;j < 3;j++){
System.out.println("i的值为"+i+"j的值为"+j);
//忽略continue后的语句
if(j==1){
continue outer;
}
System.out.println("continue后的语句");
}
}
}
}
输出结果:
i的值为0j的值为0
continue后的语句
i的值为0j的值为1
i的值为1j的值为0
continue后的语句
i的值为1j的值为1
i的值为2j的值为0
continue后的语句
i的值为2j的值为1
i的值为3j的值为0
continue后的语句
i的值为3j的值为1
i的值为4j的值为0
continue后的语句
i的值为4j的值为1