循环结构



顺序结构的程序语句只能被执行一次。如果想要同样的操作执行多次,,就需要使用循环结构。

Java中三种主要的循环结构

  • while

  • for

  • do...while

  • 在Java5中引入了一种主要用于数组的增强型for循环

1.while循环

最基本的循环

while(flag) {
   //循环内容
}

在循环刚开始时,会计算一次flag的值,若条件为真,执行循环体。而对于后来每一次额外的循环,都会在开始前重新计算一次判断是否为真。直到条件不成立,则循环结束。

通常会在循环内部,设置一个让循环结束的标志

int i = 1;
while(1 < 100){
System.out.println(i);
i++;
}

如果不清楚循环的次数,会在循环内加上if语句,当if条件满足时,执行 break 来跳出while循环

while (true){
       //等待客户端连接
       //定时检查
       //......
   if(flag)
       break;
}

如果判断条件一直为true,或没有让循环停止的标志,这样就会造成无限循环也就是死循环。我们正常的业务编程中应该尽量避免死循环。会影响程序性能或者造成程序卡死奔溃!

2.do...while循环

对于 while 语句而言,如果不满足条件,则不能进入循环。有时候需要即使不满足条件,也至少执行一次

do{
   //循环内容
}while(flag)

表达式 flag 在循环体的后面,所以语句块在检测表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。

While和do-While的区别:while先判断后执行。dowhile 是先执行后判断!

Do...while总是保证循环体会被至少执行一次!这是他们的主要差别。

3.for循环

for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。

循环执行的次数是在执行前就确定的

for(初始化;布尔表达式;更新){
   //循环内容
}
  • 最先执行初始化步骤。可以声明一种类型,也可初始化一个或多个循环控制变量,也可以是空语句。

  • 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。

  • 执行一次循环后,更新循环控制变量,迭代因子控制循环变量的增减。

  • 再次检测布尔表达式。循环执行上面的过程。

for(int i=0; i<=100; i++){
   System.out.println(i);
}//从1输出到100
//i++控制了循环次数

 

//计算0到100之间的奇数和偶数的和
int oddSum = 0;
int evenSum = 0;
for(int i=0; i<=100; i++){
   if(i % 2 != 0){
       oddSum = oddSum + i;
  }else{
       evenSum = evenSum + i;
  }
   System.out.println("奇数的和:" + oddSum);
   System.out.println("偶数的和:" + evenSum);
}

4.增强for循环

主要用于数组集合的 for 循环

for(声明语句 : 表达式)
{
   //代码句子
}

声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句 块,其值与此时数组元素的值相等。

表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

int[] arr = {1,2,3,4,5,6,7,8,9,0};
for(int i: arr){
   System.out.print(" " + i);
}
String[] strArr = {"Tom", "Lay", "Lamm"};
for(String str : strArr){
   System.out.print(" " + str);
}