第三章 流程控制——选择结构与循环结构
在java中有3种流程控制结构:顺序结构、选择结构、循环结构
一、顺序结构
顺序结构是指程序从上到下依次执行每条语句的结构。
二、选择结构
Java提供了if控制语句和switch语句来实现选择结构
1.if控制语句
if控制语句共有三种不同的形式,分别是单分支,双分支,多分支结构。
1.使用if语句实现单分支处理
语法如下:
if(表达式){
(语句)
}
- if是java中的关键字,表示如果的意思
- if后面括号里的表达式返回的值只有true和false
举个例子:小张的数学成绩是98分,老师说上90分就带他去郊游,问,小张能去郊游吗?
public class Demo01{
public static void main(String[] args){
int scores=98;
if(scores>90){
System.out.println("可以去郊游");
}
}
}
以上是其代码,他的执行步骤如下:
- 声明一个值为98的整型变量来存储小张的成绩
- 对括号里scores>98这个表达式进行判断
- 如果表达式为true,则执行if条件内的语句
- 如果表达式为fasle,则跳过不执行内部语句
2.使用if-else语句实现双分支处理
if-else的语法如下:
if(表达式){
语句1
}else{
语句2
}
当表达式为true,执行语句1,表达式为fasle,执行语句2
同样的延续上面的例子,成绩满分才可以去郊游,否则就抄卷子2遍
public class Demo02{
public static void main(String[] args){
int scores=98;
if(scores==100){
System.out.println("可以去郊游");
}else{
System.out.println("罚抄卷子2遍");
}
}
}
3.使用多分支if语句实现多分支处理
当有多个条件判断时,需要使用多分支if来解决
语法如下
if(表达式1){
语句1
}else if(表达式2){
语句2
}else if(表达式3){
语句3
}
…
else if可以有很多个,有多少个判断条件就写多少个else if
多分支语句的执行步骤如下:
- 首先对表达式1进行判断
- 如果表达式1的结果为true,则执行语句1,否则继续往下判断表达式2的值
- 如果表达式2的结果为true,则执行语句2,否则继续往下判断表达式3的值
注:不管有多少个else if在,只要执行了符合条件中的一个,其余都不会执行,如果条件都不满足,那么执行else内的语句。
2.使用嵌套if控制语句
在if控制语句中又包含一个或多个if控制语句的称为嵌套if控制语句。
语法如下:
if(表达式1){//首先对表达式1进行判断,如果为true,进入内部判断表达式2,否则直接跳到与它对应的else那里
if(表达式2){
语句1
}else{
语句2
}
}else{
if(表达式3){
语句3
}else{
语句4
}
}
嵌套if的执行操作如下:
- 对表达式1的结果进行判断
- 如果表达式1的结果为true,再对表达式2的结果进行判断。如果表达式2的结果为true,则执行语句1,否则,判断表达式2的值
- 如果表达式1的结果为fasle,对表达式3的结果进行判断。如果表达式3的结果为true,则执行语句3,否则,判断表达式4的值
注:外层和内层的条件要搞清楚,只有满足外层条件,内层才会执行,想匹配的一对if-else左对齐,
举个例子:学校举办运动会,百米赛跑成绩在10秒内的学生有资格进入决赛,根据性别分别进入男子组和女子组
3.switch语句
switch语句用来实现多分支选择结构,它和多分支if控制语句结构在某些情况下可以相互代替。
switch语法如下
switch(表达式){
case 常量1:
语句;
break;
case 常量2:
语句;
break;
default:
语句;
break;
- switch、case、break、default都是java中的关键字。
- switch后面的表达式只能是整型、字符型或枚举类型。
- case用于与表达式进行匹配。
- break用于终止后续语句的执行。
- default是可选的,当条件都不匹配时执行default的语句。
注:如果case后没有break语句,程序将继续向下执行,直到遇到break语句或switch语句结束。
switch语句执行步骤如下
- 计算switch表达式的值
- 将计算结果从上到下和case后的常量就行对比
- 如果相等那么执行该常量后的代码,遇到break结束
- 如果和任何一个常量都不一样,就执行default的语句
三、循环结构
java中的循环结构有while循环、do-while循环、for循环等,循环结构的特点是在给定条件成立时,反复执行某程序段,直到条件不成立为止。
循环语句,分为3部分
- 初始部分:设置循环的初始状态
- 循环体:重复执行的代码
- 循环条件:判断是否继续循环的条件,如”i<100"判断循环次数是否已经达到100次
1.while循环
语法:
变量初始化
while(循环条件){ //括号里的是布尔表达式**
循环体
}
举个例子:请用while循环实现1+2+3+4+…+100的求和计算
步骤如下
-
首先定义sum变量,代表总和,初始值为0;int sum=0;
-
定义循环变量i,依次取1~100每个数,初始值为1 ;int i=1;
-
当i<=100时,重复进行加法操作,将sum+i的值重复赋值给sum,每次相加后要将i的值递增。
-
当i的值编程101时,循环条件就不成立了,退出循环,并输出最终结果5050;
public static void main(String[] args){
int sum=0;
int i=1;
while(i<=100){
sum+=i;
i++;
}
System.out.println(“sum=”+sum);
}
总结:while语句是先判断循环条件再执行循环体,如果第一次判断循环条件为假,循环将一次都不执行。
2.do-while循环
语法:
do{
循环体
}while(循环条件);
- do-while循环已关键字do开头
- 大括号内是循环体,就是循环操作
- 最后while关键字后紧随的括号内是循环条件
注:do-while以分号结尾
举例:还是用上面的例子
步骤如下:
-
和使用while基本相同,首先定义sum的变量代表总和,定义i的值代表初始值
-
然后执行循环操作
-
差别是先执行了循环操作,后才判断循环条件,与while相反,先斩后奏
public static void main(String[] args){
int sum=0;
int i=1;
do{
sum+=i;
i++;
}while(i<=100);
System.out.println(“sum=”+sum)
}
输出结果:sum=5050
总结:do-while循环是先执行后判断,就算条件不成立,那他也肯定会执行一次
3.for循环
语法:
for(变量初始值;循环条件;修改循环变量的值){
循环体
}
for循环的操作步骤如下:
- 首先进行变量的初始化操作
- 然后对循环条件进行判断
- 如果结果为true,执行循环体
- 循环体执行后执行修改循环变量的值,接下来再次判断循环条件如果为true,再次执行循环体
- 如果结果为false,不执行循环体,执行修改循环变量的值,然后在进行判断
注:不管循环多少次,变量的初始值只执行一次,和while循环有相似点,都是先判断在执行
还是来解决1~100的总和
public static void main(String[] args){
int sum=0;
for(int i=1;i<=100;i++){
sum+=i;
}
System.out.println("sum="+sum)
}
4.多重循环
多重循环的意思是一个循环语句的循环体中在包含一个循环语句,又称嵌套循环,和之前学的嵌套if类似,不同的循环语句可以相互嵌套。
语法:
while(循环条件1){
循环语句1
for(循环条件2){
循环语句2
}
}
这是while语句和for语句嵌套的例子,其中while循环称为外层循环,for循环称为内层循环
该二重循环的执行过程是,外层while循环每循环一次,内层for循环就要从头到尾完整的执行一遍
示例:乘法表
解题思路:
-
我们都知道乘法表是一个纵横的表格,有行有列
-
初始值都是从1开始,直到9结束,这样就获得了初始值为1,循环条件是<=9
-
for(int i=1;i<=9;i++),这样共能循环9行,但每行现在循环出一条语句肯定是不行的,乘法表是第一行一个式子,第二行两个式子,以此类推,就说明当i=1时,列(j)=1,当i=2时,列(j)=2,也就是说j<=i。
-
外层循环循环一次,也是就是第一行,内层循环执行一遍,当i=1,j=1,i=2时,j=2,j就相当与执行2次,以此类推。
-
内层循环循环一遍后要记得换行,不然就堆在一起了
public static void main(String[] args){
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(i+""+j+"+"+ij+"\t");
}
System.out.println();
}
}
运行结果如下:
5.跳转语句
java语言支持3种类型的跳转语句:break、continue、return。
1.break语句
break语句在循环中的作用是终止当前循环,在switch语句中的作用终止switch
public static void main(String[] args){
for(int i=1;i<10;i++){
if(i%3==0){
break;
}
System.out.print(i+" ");
}
System.out.println("循环结束");
}
分析如下:
1.示例中for循环中如果i%3==0,则执行break命令
2.输出结果为“1 2 循环结束”。
break语句的作用是终止当前循环语句的执行,然后执行当前循环后面的语句。
2.continue语句
这个语句的作用是强制循环提前返回,也就是让循环跳过本次循环进行下一次循环
public static void main(String[] args){
for(int i=1;i<=10;i++){
if(i%4==0){
continue;
}
System.out.print(i+" ");
}
System.out.println("循环结束");
}
分析如下:
1.执行该程序,将输出“1 2 3 5 6 7 9 10 循环结束”。结果中不输出4和8
2.当i=4或i=8时,满足if条件,执行continue操作,强制返回循环,并没有执行他后面的语句所以不输出者两个数
3.return语句
return语句的作用是结束当前方法的执行并退出返回到调用该方法的语句处
public static void main(String[] args){
for(int i=1;i<=10;i++){
if(i%4==0){
return;
}
System.out.print(i+" ");
}
System.out.println("程序结束");
}
分析如下:
1.执行该程序时,将输出“1 2 3 ”,结果中没有输出程序结束字样
2.执行return时,不仅结束了当前循环,还结束了当前方法中所有的执行