循环语句: 可以让一部分代码,反复执行
1.1 循环语句while
while循环:
编写格式:
while(条件){
循环体
}
条件: 当条件是true,就执行循环体,执行完循环体后
程序再次执行while中的条件,如果条件还是true,继续执行循环体
直到条件是false的时候,循环就结束
public class WhileDemo{public static void main(String[] args){//输出 1-4之间的整数//定义变量,整数类型, 循环的条件int i = 1;while( i < 5 ){System.out.println(i);i++;}}
在上述代码中,x初始值为1,在满足循环条件x <= 4的情况下,循环体会重复执行,打印x的值并让x进行自增。因此打印结果中x的值分别为1、2、3、4。
大家要注意的是,代码x++用于在每次循环时改变变量x的值,从而达到最终改变循环条件的目的。如果没有这行代码,整个循环会进入无限循环的状态,永远不会结束。
1.2 循环语句for
for循环语句是最常用的循环语句,一般用在循环次数已知的情况下。for循环语句的语法格式如下:
for(初始化表达式; 循环条件; 操作表达式){
执行语句
………
}
/*for循环编写格式for(初始化变量 ; 条件 ; 增量){循环体}初始化变量: 定义变量,作用,控制循环的次数条件: 当条件是true,执行循环体,条件是false,结束循环增量: 变量自增情况 */ public class ForDemo{public static void main(String[] args){//for循环,输出0-10for(int i = 0 ; i < 11 ; i++){System.out.println(i);}} }
for循环执行示意图如下:
利用for循环累加求和
*利用for循环,计算1+4的结果1 + 2 + 3 + 4 = 101+2的和+31+2+3的和+4 */ public class ForDemo_1{public static void main(String[] args){// 定义变量,记录求和后的数据int sum = 0;// 利用循环,将变量从1变化到4for(int i = 1 ; i <= 4 ; i++){//对变量进行求和sum = sum + i;}System.out.println(sum);} }
1.3 循环语句do…while
do…while循环语句和while循环语句功能类似,其语法结构如下:
do {
执行语句
………
} while(循环条件);
在上面的语法结构中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,
循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。(也就是先做后判断!)不管循环条件是否满足都会执行一次循环体!
do…while循环的执行流程如下图所示
基础示例:
*do...while循环编写格式:do{循环体}while(条件);特点: 无条件先执行一次 */ public class DoWhileDemo{public static void main(String[] args){int i = 0; do{System.out.println(i);i++;}while( i < 5);} }
接下来使用do…while循环语句来实现打印1~4之间的自然数DoWhileDemo.java。
特点:(也就是先做后判断!)不管循环条件是否满足都会执行一次循环体!
public class DoWhileDemo {public static void main(String[] args) {int x = 1; // 定义变量x,初始值为1do {System.out.println("x = " + x); // 打印x的值x++; // 将x的值自增} while (x <= 4); // 循环条件 } }
我们发现WhileDemo.java与DoWhileDemo.java运行的结果一致,这说明什么呢?这说明do …while循环和while循环能实现同样的功能。
然而在程序运行过程中,这两种语句还是有差别的。如果循环条件在循环语句开始时就不成立,那么while循环的循环体一次都不会执行,
而do…while循环的循环体还是会执行一次。若将DoWhileDemo.java中的循环条件x<=4改为x < 1,
DoWhileDemo.java运行结果会打印x=1,而WhileDemo.java运行结果什么也不会打印。
1.4 无限循环
最简单无限循环格式:
while(true){}
或
for(;;){}
无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。
如下代码是无限循环的几种写法!
public class WhileForDemo{public static void main(String[] args){//while形式死循环/*while(true){}*///for形式死循环 // for( ; true ; ){ // // }for(;;){System.out.println("a"); }} }
1.5 循环嵌套
嵌套循环是指在一个循环语句的循环体中再定义一个循环语句的语法结构。while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,如最常见的在for循环中嵌套for循环,格式如下:
外循环,控制的是行数
内循环,控制的是每行的个数
for(初始化表达式; 循环条件; 操作表达式) {………for(初始化表达式; 循环条件; 操作表达式) {执行语句………}……… }
*循环的嵌套: 循环里面还有循环, for形式多for(){for(){}}总的循环次数 = 内循环次数 * 外循环的次数内循环,是外循环的循环体外循环,控制的是行数内循环,控制的是每行的个数 */ public class ForForDemo{public static void main(String[] args){for(int i = 0 ; i < 9 ; i++){for(int j = 0; j < i+1 ;j++){System.out.print("* ");}System.out.println();}} }
图1-1 运行结果
在上述代码中定义了两层for循环,分别为外层循环和内层循环,外层循环用于控制打印的行数,内层循环用于打印“*”,每一行的“*”个数逐行增加,最后输出一个直角三角形。由于嵌套循环程序比较复杂,下面分步骤进行详细地讲解,具体如下:
第一步,在第3行代码定义了两个循环变量i和j,其中i为外层循环变量,j为内层循环变量。
第二步,在第4行代码将i初始化为1,条件i <= 9为true,首次进入外层循环的循环体。
第三步,在第5行代码将j初始化为1,由于此时i的值为1,条件j <= i为true,首次进入内层循环的循环体,打印一个“*”。
第四步,执行第5行代码中内层循环的操作表达式j++,将j的值自增为2。
第五步,执行第5行代码中的判断条件j<=i,判断结果为false,内层循环结束。执行后面的代码,打印换行符。
第六步,执行第4行代码中外层循环的操作表达式i++,将i的值自增为2。
第七步,执行第4行代码中的判断条件i<=9,判断结果为true,进入外层循环的循环体,继续执行内层循环。
第八步,由于i的值为2,内层循环会执行两次,即在第2行打印两个“*”。在内层循环结束时会打印换行符。
第九步,以此类推,在第3行会打印3个“*”,逐行递增,直到i的值为10时,外层循环的判断条件i <= 9结果为false,外层循环结束,整个程序也就结束了。
双层for循环示意图:
1.6跳转语句(break、continue)
break 关键字
作用于循环中,终止循环的作用
如下图示例:
/*break 关键字作用于循环中,终止循环的作用 */ public class BreakDemo{public static void main(String[] args){int i = 1;while(i < 2000){if(i == 3){break;}else{System.out.println(i);}i++;}} }
2、 标记
当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环
如果想使用break语句跳出外层循环则需要对外层循环添加标记。接下来将ForForDemo.java稍作修改,控制程序只打印4
行“*”,如下所示。BreakDemo02.java
public class BreakDemo_1{public static void main(String[] args){a:for(int i = 0 ; i < 2; i++){for(int j = 0; j < 5 ;j++){System.out.print("j="+j);break a;}System.out.println("i="+i);}} }
3、 continue语句
continue语句用在循环语句中,它的作用是终止本次循环,执行下一次循环。
/*continue 关键字 作用: 在循环中, 终止本次循环,开始下一次循环 */ public class ContinueDemo{public static void main(String[] args){for(int i = 0 ; i < 10 ; i++){if(i%2==0){continue;}System.out.println(i);}} }