上一篇提到的三种结构分别为:
- 顺序结构:从上往下逐行执行,每句必走
- 分支结构:有条件的执行某语句一次,并非每句必走
- 循环结构:有条件的执行某语句多次,并非每句必走
今天就来说说循环结构,因顺序结构的程序语句只能被执行一次,从而出现的循环结构来满足需求;如果您想要同样的操作执行多次,就需要使用循环结构以便解决编程中同样的代码做多次的问题。
Java中有三种主要的循环结构:
- while 循环
- do…while 循环
- for 循环
循环:反复多次执行一段相同或相似的代码
while 循环
while是最基本的循环,它的结构为:
1)语法while( 布尔表达式 ) {
//循环内容
}
2)执行过程:
先判断boolean(布尔表达式 )的值,若为true则执行语句块,
再判断boolean(布尔表达式 )的值,若为true则再执行语句块,
再判断boolean(布尔表达式 )的值,若为true则再执行语句块,
如此反复,直到boolean(布尔表达式 )的值为false时,while循环结束
注意:只要布尔表达式为 true,循环就会一直执行下去(即无限循环或死循环)。
3)循环三要素:- 循环变量的初始化
- 循环的条件(以循环变量为基础作为判断条件)
- 循环变量的改变(向着循环的结束变)
程序演示
//循环变量: 次数times
// 1)int times=0; //第一要素循环变量的初始化
// 2)times<5; //第二要素循环的条件(以循环变量为基础)
// 3)times++; //第三要素循环变量的改变(向着循环的结束变)
//times到5时结束
// 程序练习:输出5次"行动是成功的阶梯.
int times = 0; //1.循环变量的初始化
while(times<5){ //2.循环的条件
System.out.println("行动是成功的阶梯");
times++; //3.循环变量的改变
}
System.out.println("继续执行...");
//输出结果为:
行动是成功的阶梯
行动是成功的阶梯
行动是成功的阶梯
行动是成功的阶梯
行动是成功的阶梯
继续执行...
注意:循环变量:在整个循环过程中所反复改变的那个数
do…while 循环
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。所以就用到do…while 循环.
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
注意:当第1要素与第3要素相同时,首选do...while(详情如下程序演示)
1)语法:
do{
语句块
}while(boolean);
2)执行过程:
先执行语句块,再判断boolean的值,若为true则
再执行语句块,再判断boolean的值,若为true则
再执行语句块,再判断boolean的值,若为true则
再执行语句块,如此反复,直到boolean的值为false时,do...while循环结束
程序演示
package day04;
import java.util.Scanner;
//猜数字游戏
//先用while循环演示----1-3要素相同是什么意思.
public class Gueesing {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = (int)(Math.random()*1000+1); //1到1000之内的随机数
System.out.println(num); //查看随即到的数
System.out.println("猜吧!");
int guess = scan.nextInt(); //第一要素
while(guess!=num){ //第二要素
if(guess>num){
System.out.println("太大了");
}else{
System.out.println("太小了");
}
System.out.println("猜吧!");
guess = scan.nextInt(); //3.第三要素
}
System.out.println("恭喜你猜对了!");
}
}
注意:这里的一三要素代码是相同的,这种情况就优先使用do...while循环结构
//--------------------------------------------------------
//以下是猜数字游戏do...while循环结构的程序
package day04;
import java.util.Scanner;
//猜数字游戏
public class Gueesing {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = (int)(Math.random()*1000+1); //1到1000之内的随机数
System.out.println(num); //查看随机到的数
int guess;
do{
System.out.println("猜吧!");
guess = scan.nextInt(); //第一和第三要素合一起,每次循环执行一次
if(guess>num){
System.out.println("太大了");
}else if(guess
for 循环
显然循环用 while 或者 do...while表示就能实现循环需求,为什么还出现一个for 循环呢?
因为Java 提供的另一种语句 —— for 循环,使一些循环结构变得更加简单。并且for结构:应用率最高,与次数相关的循环都使用它.
for循环执行的次数是在执行前就确定的。语法格式如下:
1)语法
for(要素1;要素2;要素3){
语句块/循环体------------反复执行的代码
}
2)执行过程:
要素1初始化--要素2条件判断--语句块执行--要素3改变
- 最先执行 要素1初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句(可以写在外边但分号必须要保留)。
- 然后要素2条件判断,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
- 执行一次循环后要素3改变,更新循环控制变量。
- 再次检测布尔表达式。循环执行上面的过程。(直到为false,循环终止,开始执行循环体后面的语句。)
程序演示
for(int times=0;times<5;times++){
System.out.println("行动是成功的阶梯");
}
//输出结果为:
行动是成功的阶梯
行动是成功的阶梯
行动是成功的阶梯
行动是成功的阶梯
行动是成功的阶梯
//for中的循环变量 times的作用域----仅在当前for中
注意:for中的循环变量num的作用域----仅在当前for中
当作用域重叠时,变量不能同名.
break 关键字
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
break 跳出最里层的循环,并且继续执行该循环下面的语句。
for(int num=1;num<=9;num++){
if(num==4){ //在某种特定情况下,提前结束循环
break; //跳出当前循环,当前循环结束
}
System.out.println(num+"*9="+num*9);
}
continue 关键字
跳过循环体中剩余语句而进入下一次循环-----------只能用在循环中
//输出9的乘法表,跳过能被3整除的
for(int num=1;num<=9;num++){
if(num%3==0){
continue; //跳过循环体中剩余语句而进入下一轮循环
}
System.out.println(num+"*9="+num*9);
}
嵌套循环
-
循环中套循环,常常多行多列时使用,一般外层控制行,内层控制列
-
执行规则:外层循环走一次,内层循环走所有次
-
建议:嵌套层数越少越好,能用一层就不用两层,能用两层就不用三层
-
break只能跳出当前层循环
for(int num=1;num<=9;num++){ //控制行
for(int i=1;i<=num;i++){ //控制列
System.out.print(i+"*"+num+"="+i*num+"t"); //print():输出不换行
}
System.out.println(); //换行
}
总结
-
三种结构如何选择:
-
先看循环是否与次数相关:
-
若相关-----------------------------直接上for
-
若无关,再看要素1与要素3的代码是否相同:
-
若相同-----------------------直接上do...while
-
若不同-----------------------直接上while



