Day07 Java的循环结构控制
三. 循环结构
-
while循环结构
while是最基本的循环,他的结构如下:
while (boolean 表达式) { //循环内容 }
注意点:
- 循环开始前判断boolean表达式,如果boolean表达式一开始就为false,循环不会执行
- 只要Boolean表达式为true,循环就不会终止。
- 大多数情况我们需要让循环停下,因此我们需要一个让表达式失效的方式。
- 少部分情况需要循环一直执行,比如服务器的请求监听等。
- 循环条件恒为true就会造成无限循环,会影响我们的陈旭性能甚至造成卡死,应该尽量避免。
一个实例,计算1+2+……+100
public class LoopStructure { public static void main(String[] args) { //while Loop //calc 1+2+ ... + 100 = ? int i = 1, sum = 0; while (i < 101){ sum += i++; } System.out.println("1+2+ ... +100 = " + sum); //Print 5050, right } }
-
do ... while 循环结构
do ... while 循环与 while 循环类似,不同点在于 do .. while 循环至少会执行一次。结构如下:
do { //循环内容 } while (boolean 表达式)
相同的例子使用do while:
public class LoopStructure { public static void main(String[] args) { //do while loop //same sample int i = 1, sum = 0; do { sum += i++; } while (i < 101); System.out.println("1+2+ ... +100 = " + sum); //Print 5050, right } }
-
for 循环
-
虽然所有循环都可以使用while或者do while表示,但是Java提供了另一种语句 for循环,使一些循环结构变得更加简单。
-
for循环语句是支持迭代的一种通用结构,是最有效,最灵活的循环结构。
-
for循环执行的次数是在执行前就确定的。语法格式如下:
for (初始化; boolean exp; 迭代因子) { //循环代码 }
关于for循环:最先执行初始化步骤,可以声明一种类型,但可以初始化多个循环控制变量,可以为空。然后检查boolean表达式的值,如果为true,循环体将被执行,如果为false,循环终止。也可以为空。boolean表达式为空时,for循环没有其他流程控制语句就会变成死循环。执行一次循环后,更新循环控制变量(迭代因子控制循环变量的变化)。再次检测boolean表达式,循环执行上面的过程。
以下是两个小例子:
public class ForLoop { public static void main(String[] args) { //for loop //IDEA can use [number.for] to create for loop quickly //for exp: 100.for //2.calc 1~100 sum of odd and even int oddSum = 0, evenSum = 0; for (int i = 1; i < 101; i++) { if (i % 2 == 0) { evenSum += i; } else { oddSum += i; } } System.out.println("Sum of odd: " + oddSum); System.out.println("Sum of even: " + evenSum); System.out.println("============================="); /* * 3. Print numbers in 1~1000 which can be divided exactly by 5 * And each line print 3 numbers */ for (int i = 1; i <= 1000; i++) { if (0 == (i % (5*3))) { System.out.println(); } if (i % 5 == 0) { System.out.printf(i + "\t"); } } } }
一个输出99乘法表的例子
public class ForLoop { public static void main(String[] args) { /* * 4. Print 9-9 multiplication table */ for (int i = 1; i < 10; i++) { for (int j = 1; j <= i; j++) { System.out.printf(i + "*" + j + " = " + i*j + "\t"); } System.out.println(); } } }
详细的讲解可以看这个视频:
-
-
break & continue
- break在任何循环语句的主体部分,都可以使用。它用于强行退出循环,不再执行循环中的剩余语句。需要注意的是他一次只能跳出一层循环。
- continue 语句在循环语句中,用于终止某一次循环过程,跳过过该次循环直接进行是否循环的判定。
public class BreakAndContinue { public static void main(String[] args) { // The differences between break and continue // Use the sample below to show it int i = 0; //输出0-4 while (i < 10 ){ System.out.println(i); if ( i == 5) break; ++i; } System.out.println("======================="); i = 0; //输出0-9,但是不输出5 while (i < 10 ){ if ( i == 5) { ++i; continue; } System.out.println(i); ++i; } } }
-
关于goto关键字
goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子---带标签的break和continue。
“标签”是指后面跟一个冒号的标识符,例如: label:
对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。public class BreakAndContinue { public static void main(String[] args) { /* * Get primer number in 101~150 * Use Label * It is just a sample * Do not use Label in your daily programming */ outer: for (int i1 = 101; i1 <=150; i1++) { for (int j = 2; j < i1/2; j++) { if (0 == i1 % j) continue outer; } System.out.printf(i1 + " "); } } }