本篇主要介绍Java语言中的循环结构。
循环结构
生活中,循环随处可见,比如春夏秋冬四季不断更替,白天黑夜不断交替,路口的红绿灯由绿到黄到红不断更替,这些都属于循环。代码中的循环结构,是指重复多次的执行一个代码块。
循环的两个要素:循环条件与循环体。
Java中的循环结构有while、do-while和for循环三种。
8.1 while循环
8.1.1while循环语法
语法如下:
while(布尔表达式){
代码块;
}
其中,布尔表达式就是循环条件,花括号中的代码块即为循环体。
执行逻辑:
1)判断布尔表达式,如果为false,则不执行代码块,直接结束整个循环,如果为true,则执行循环体中的代码块。
2)执行完循环体之后,再次判断布尔表达式,重复步骤1)。
8.1.2 while的应用
while案例1
public static void main(String[] args){
int age = 10;
while(age<18){
System.out.println("您尚未成年。");
age++;//改变循环条件
}
System.out.println("恭喜,您已成年!");
}
案例分析:
上述代码中,while循环在年龄没有达到18岁的时候,循环输出“您未成年。”每次执行循环体,年龄就会加一,直到年龄达到18岁后,结束while循环,执行循环后面的输出“恭喜,您已成年!”。
要注意:一般情况下,循环体中需要有语句改变循环条件,使循环条件有为false的可能性,防止变成死循环。
while案例2
int age = 10;
while(age<18){
System.out.println("您未成年。");
age--;
}
System.out.println("恭喜,您已成年!");
案例分析:
上述代码从表面上看,貌似是一个死循环,会一直输出“您未成年。”但实际上并非如此,执行较长的一段时间后,会跳出循环,输出“恭喜,您已成年!”。
原因是,age是int型数据,一直减小,达到int的下边界,再减小,就会溢出,变为很大的正数。这样,就跳出了while循环。
如果想要构造死循环,推荐使用while(true){}这种形式。
8.2 do-while循环
8.2.1 do-while语法
do{
代码块;
}while(布尔表达式);
do后面的花括号中的代码块为循环体,while中的布尔表达式为循环条件,注意,do-while的最后面必须要加一个分号,这个是与while不同之处。
执行逻辑:
1)首先执行循环体中代码块
2)执行完循环体后判断布尔表达式,如果为false,则跳出循环,如果为true,则再次执行循环体中的代码块。
3)重复步骤2),直到循环条件为false,跳出循环。
8.2.2 do-while应用
int money = 220;
do{
//吃一顿饭需要100元
System.out.println("吃一顿饭花费一百元。");
money -= 100;
}while(money>100);
上述代码中,钱数为220元时,总共可以吃2顿饭,也就是循环体的代码循环了2次。但是,如果将money的初始值改为20,仍然可以吃一顿饭,虽然吃一顿饭需要100元,但如果是先吃了饭,再结账,虽然兜里的钱不够结账的,但饭已经吃完了,这就是传说中的霸王餐!!!
因此,do-while有一个特点,循环体至少会被执行一次。
8.3 for循环
8.3.1 for循环的语法
如果循环的次数是固定的,一般使用for循环,其语法如下:
for(表达式1;表达式2;表达式3){
代码块;
}
其中,表达式1一般用来对循环计数的变量进行初始化(只执行一次)。表达式2为布尔表达式,是循环条件。表达式3一般是对循环计数的变量进行改变。
其执行逻辑:
1)执行初始化表达式1
2)进行表达式2的判断
3)根据表达式2的判断结果执行:
如果为true,则执行循环体中的代码块。
如果为false,则跳出循环,不在执行4)和5)步。
4)执行表达式3
5)重复执行2)到4)步,直至跳出循环。
8.3.2 for循环的应用
求和:1+2+3+4+5+…+97+98+99+100
int sum = 0;
for(int i=1;i<=100;i++){
sum += i;
}
System.out.println("和为:"+sum);//输出和为5050
8.4 break与continue
8.4.1 break
循环过程中,如果符合某种条件时,需要终止循环,可以使用break关键字来退出循环。
比如:循环接收用户输入的内容,并原样输出,如果用户输入q则退出程序。
String str = "";
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("请输入内容:");
str = scanner.nextLine();
if(str.equals("q")){
break;//如果是q则跳出整个循环
}
System.out.println(str);
}
System.out.println("已退出程序。");
8.4.2 continue
如果在循环过程中,如果想在某个条件下调过其中的某一次循环,继续下一次循环的话,需要使用continue语句。
求和:1+2+3+4+6+7+…+99+100(注意没有5)
int sum = 0;
for(int i=1;i<=100;i++){
if(i==5){
continue;//结束第5次循环,继续执行后面的循环
}
sum += i;
}
System.out.println("和为:"+sum);//输出和为5045
8.4.3 break与continue的区别
1、break不仅可以用于循环中,还可以用于switch-case语句中;
而continue只能用于循环中。
2、break是直接结束整个循环;continue是即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判定,继续执行下一次及后面的循环。
下一篇将介绍Java中的数组。