流程控制语句

一、流程控制

什么是流程控制?

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果 有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现 我们要完成的功能。

顺序结构

public static void main(String[] args){

//顺序执行,根据编写的顺序,从上到下运行

System.out.println(1);

System.out.println(2);

System.out.println(3);

}


二、判断语句

判断语句1--if

if语句第一种格式: if

if(关系表达式){

语句体;

执行流程

首先判断关系表达式看其结果是true还是false

如果是true就执行语句体

如果是false就不执行语句体

流程图:

判断语句2--if...else

if语句第二种格式: if...else

if(关系表达式) {

语句体1;

}else {

语句体2;

}

执行流程

  • 首先判断关系表达式看其结果是true还是false
  • 如果是true就执行语句体1
  • 如果是false就执行语句体2

判断语句3--if..else if...else

if语句第三种格式: if...else if ...else

if (判断条件1) {

执行语句1;

} else if (判断条件2) {

执行语句2;

}

...

}else if (判断条件n) {

执行语句n;

} else {

执行语句n+1;

}

执行流程

  • 首先判断关系表达式1看其结果是true还是false
  • 如果是true就执行语句体1
  • 如果是false就继续判断关系表达式2看其结果是true还是false
  • 如果是true就执行语句体2
  • 如果是false就继续判断关系表达式…看其结果是true还是false

  • 如果没有任何关系表达式为true,就执行语句体n+1。


if语句和三元运算符的互换

在某些简单的应用中,if语句是可以和三元运算符互换使用的。

三元运算符格式: 数据类型 变量名 = 布尔类型表达式?结果1:结果2

public static void main(String[] args) {

int a = 10;

int b = 20;

//定义变量,保存a和b的较大值

int c;

if(a > b) {

c = a;

} else {

c = b;

}

//可以上述功能改写为三元运算符形式

c = a > b ? a:b;

}


三、选择语句

选择语句--switch

switch语句格式:

switch(表达式) {

case 常量值1:

语句体1;

break;

case 常量值2:

语句体2;

break;

...

default:

语句体n+1;

break;

}

执行流程

  • 首先计算出表达式的值
  • 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
  • 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉

1、switch语句中,表达式的数据类型,可以是byte,short,int,char,enum(枚举),JDK7后可以接收字符串。byte,short,int,char4中基本数据类型,enum、String(1.7后)2种引用数据类型

2、switch语句中case中的数值不能重复

3、switch语句格式可以很灵活,前后顺序可以颠倒,而且break语句还可以省略,但是省略会出现的问题:穿透性,匹配哪一个case就从哪一个位置向下执行,直到遇到了break或者整体结束为止。


case的穿透性

在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运 行,直到遇到break,或者整体switch结束。

public static void main(String[] args) {

int i = 5;

switch (i){

case 0:

System.out.println("执行case0");

break;

case 5:

System.out.println("执行case5");

case 10:

System.out.println("执行case10");

default:

System.out.println("执行default");

}

}

上述程序中,执行case5后,由于没有break语句,程序会一直向后走,不会在判断case,也不会理会break,直接

运行完整体switch。

由于case存在穿透性,因此初学者在编写switch语句时,必须要写上break。


四、循环语句

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。

循环语句1--for

for循环语句格式:

for(初始化表达式①; 布尔表达式②; 步进表达式④){

循环体③

}

执行流程

执行顺序:①②③④>②③④>②③④…②不满足为止。

①负责完成循环变量初始化

②负责判断是否满足循环条件,不满足则跳出循环

③具体执行的语句

④循环后,循环条件所涉及变量的变化情况 ,迭代

循环练习:使用循环,计算1-100之间的偶数和

public static void main(String[] args) {

//1.定义一个初始化变量,记录累加求和,初始值为0

int sum = 0;

//2.利用for循环获取1‐100之间的数字

for (int i = 1; i 100; i++) {

//3.判断获取的数组是奇数还是偶数

if(i % 2==0){

//4.如果是偶数就累加求和

sum += i;

}

}

//5.循环结束之后,打印累加结果

System.out.println("sum:"+sum);

}

循环语句2--while

while循环语句格式:

初始化表达式①

while(布尔表达式②){

循环体③

步进表达式④

}

执行流程

  • 执行顺序:①②③④>②③④>②③④…②不满足为止。
  • ①负责完成循环变量初始化。
  • ②负责判断是否满足循环条件,不满足则跳出循环。
  • ③具体执行的语句。
  • ④循环后,循环变量的变化情况。

while循环输出10次HelloWorld

public static void main(String[] args) {

//while循环实现打印10次HelloWorld

//定义初始化变量

int i = 1;

//循环条件

while(i10){

System.out.println("HelloWorld");

//步进

i++;

}

}

while循环计算1-100之间的和

public static void main(String[] args) {

//使用while循环实现

//定义一个变量,记录累加求和

int sum = 0;

//定义初始化表达式

int i = 1;

//使用while循环让初始化表达式的值变化

while(i100){

//累加求和

sum += i ;

//步进表达式改变变量的值

i++;

}

//打印求和的变量

System.out.println("1‐100的和是:"+sum);

}

循环语句3--do...while

do...while循环格式

初始化表达式①

do{

循环体③

步进表达式④

}while(布尔表达式②);

执行流程

  • 执行顺序:①③④>②③④>②③④…②不满足为止。
  • ①负责完成循环变量初始化。
  • ②负责判断是否满足循环条件,不满足则跳出循环。
  • ③具体执行的语句
  • ④循环后,循环变量的变化情况

do...while循环的特点:无条件执行一次循环体,即使我们将循环条件直接写成false,也依然会循环一次。这样的 循环具有一定的风险性,因此初学者不建议使用do...while循环。

public static void main(String[] args){

do{

System.out.println("无条件执行一次");

}while(false);

}

循环语句的区别

for 和 while 的小区别

  • 控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
  • 在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while。

跳出语句

1、break

使用场景:终止switch或者循环

  • 在选择结构switch语句中
  • 在循环语句中
  • 离开使用场景的存在是没有意义的
public static void main(String[] args) {

for (int i = 1; i10; i++) {

//需求:打印完两次HelloWorld之后结束循环

if(i == 3){

break;

}

System.out.println("HelloWorld"+i);

}

}

2、continue

使用场景:结束本次循环,继续下一次的循环

public static void main(String[] args) {

for (int i = 1; i 10; i++) {

//需求:不打印第三次HelloWorld

if(i == 3){

continue;

}

System.out.println("HelloWorld"+i);

}

}

五、扩展知识点

1、死循环

死循环:也就是循环中的条件永远为true,死循环的是永不结束的循环。例如:while(true){}。

在后期的开发中,会出现使用死循环的场景,例如:我们需要读取用户输入的输入,但是用户输入多少数据我们并 不清楚,也只能使用死循环,当用户不想输入数据了,就可以结束循环了,如何去结束一个死循环呢,就需要使用 到跳出语句了

2、嵌套循环

嵌套循环,是指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。总共的循环次数=外循环次数*内循环次数

嵌套循环格式:

for(初始化表达式①; 循环条件②; 步进表达式⑦) {

for(初始化表达式③; 循环条件④; 步进表达式⑥) {

执行语句⑤;

}

}

嵌套循环执行流程:

  • 执行顺序:①②③④⑤⑥>④⑤⑥>⑦②③④⑤⑥>④⑤⑥
  • 外循环一次,内循环多次。
  • 比如跳绳:一共跳5组,每组跳10个。5组就是外循环,10个就是内循环。

练习:使用嵌套循环,打印5*8的矩形

public static void main(String[] args) {

//5*8的矩形,打印5行*号,每行8个

//外循环5次,内循环8次

for(int i = 0; i < 5; i++){

for(int j = 0; j < 8; j++){

//不换行打印星号

System.out.print("*");

}

//内循环打印8个星号后,需要一次换行

System.out.println();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值