Java中的流程控制语句 (基础篇四)

199 阅读9分钟

流程控制就是对事物次序的布置和安排,在程序中就是对代码执行次序的安排和控制

程序中的流程控制主要有三种:顺序流程、选择流程、循环流程。

顺序流程:比如打印输出的代码按照指定的顺序结构依次排序,打印的结果按照代码的顺序执行打印;

循环流程:选择结构的代码实现;

循环流程:循环结构的代码实现;

一、顺序结果

顺序结构最容易理解也比较简单,执行顺序就是代码编写的顺序,从上到下执行。简单举个例子:

public static void main(String[] args){  
  //顺序执行,根据编写的顺序,从上到下运行   
  System.out.println(1);  
  System.out.println(2);   
  System.out.println(3);
}
输出:
1
2
3

二、选择结构

Java代码中存在一种特殊的语句,叫做选择语句,这种选择语句也需要对一些条件作出判断,从而选择对应执行的代码。这种选择语句组成的代码结构就是选择结构

选择语句分为两种:if条件语句、switch条件语句。

1. if语句

if语句是满足某种要求的条件就进行某种处理。格式:

if (布尔表达式) { //它的结果只有truefalse
    语句体;  //满足条件后执行的代码
}

执行流程:

  • 首先判断布尔表达式,看其结果是true还是false

  • 如果是true,执行语句体

  • 如果是false就不执行语句体,


举例:

public static void main(String[] args){
    System.out.println("小明出来玩了")
    //int age=16;
	int age=20;//20岁
    
    if(age>=18){
        System.out.println("小明去上网了");
    }
    
    System.out.println("小明回家了")
}

2. if...else语句

if...else语句是指如果满足某种条件就进行某种处理,否则就进行另一种处理,格式:

if (布尔表达式){
	语句体1;
} else {
	语句体2;
}

执行流程:

  • 首先判断布尔表达式看结果

  • 如果是true就执行语句体1

  • 如果是false就执行语句体2


举例:

public static void main(String[] args){
    // 判断给定的数据是奇数还是偶数
    // 定义变量
    int a = 1;
    if(a % 2 == 0) {
      	System.out.println("a是偶数");
    } else{
      	System.out.println("a是奇数");
    }
    System.out.println("结束");
}

3. if...else if...else语句

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。


举例:

public static void main(String[] args) {	
 		int socre=99;//定义变量记录分数
    
		if(socre>=90&&socre<=100) {
			System.out.println("成绩是优秀的!");
		} else if(socre>=80&&socre<90) {
			System.out.println("成绩很好!");
		} else if(socre>=70&&socre<80) {
			System.out.println("成绩良好!");
		} else if(socre>=60&&socre<70) {
			System.out.println("成绩及格!");
		} else if(socre>=0&&socre<60) {
			System.out.println("成绩不及格!");
		} else {
			System.out.println("不合法成绩");
		}  
}

4. switch语句

switch条件语句也是一种比较常用的选择语句,和if条件语句不同的是,switch只能针对某个表达式的值作出判断,从而决定程序执行那一段代码。

格式:

switch(表达式) {//具体的某个变量
        
	case 常量值1:
		语句体1;
		break;

	case 常量值2:
		语句体2;
		break;
  	...
        
     default:
		语句体n+1;
		break;
}

注意:switch的表达式只能是byte、short、int、char、Enum、String。

执行流程:

  • 首先计算出表达式的值

  • 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。

  • 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。


举例:

public static void main(String[] args) {
    //定义变量,判断是星期几
    int weekday = 6;
    //switch语句实现选择
    switch(weekday) {
        case 1:
          System.out.println("星期一");
          break;
        case 2:
          System.out.println("星期二");
          break;
        case 3:
          System.out.println("星期三");
          break;
        case 4:
          System.out.println("星期四");
          break;
        case 5:
          System.out.println("星期五");
          break;
        case 6:
          System.out.println("星期六");
          break;
        case 7:
          System.out.println("星期日");
          break;
        default:
          System.out.println("你输入的数字有误");
          break;
    }	
}

特别注意:break不能漏写,漏写了会出现case穿透

其实case的穿透性不算是一个bug,用好了可以简练代码,实际开发中可以灵活运用case穿透性解决相应的需求,用的不好会改变代码逻辑。如果case的后边不写break,将出现穿透现象,不再判断下一个case指,直接向后运行直到遇见break;

举个简单的例子:

public static void main(String[] args) {
    int week=1;
	switch(week) {
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			System.out.println("工作日");
			break;
		case 6:
		case 7:
			System.out.println("休息日");
			break;
		default :
			System.out.println("数字不在1~7范围之内,请重新指定");
	}
}

三、循环结构

Java中一段代码重复执行的语句叫做循环语句,这种循环语句形成的结构就叫做循环结构。

循环语句有三种:for语句、while语句、do...while语句。

1. for语句

格式:

for ( 初始化语句① ; 判断条件语句② ; 控制条件语句④ ) {
    
			循环体语句③
                
}

执行流程:

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

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

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

  • ③具体执行的语句

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


举例:

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);
}

注意:

  • 初始化语句i可以是任意的数字

  • 判断语句一定要保证条件有边界,可以让程序停下来,否则就会出现死循环

  • 控制语句可以变通,主要目的是让循环变量变化

  • 循环变量出了循环结构就不能使用

2. 循环语句while

格式:

初始化语句① 
while ( 条件判断② ) {
	循环体语句③	
	条件控制语句(步进表达式)④	
}

和for循环功能一样,只不过关键字不一样,代码结构不一样。和选择结构中的if判断也有点类似,满足条件就执行 {} 内的语句,区别在于while语句会反复地执行,知道条件不成立。

执行流程:

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

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

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

  • ③具体执行的语句。

  • ④循环后,循环变量的变化情况。



举例:

public static void main(String[] args) {
    //使用while循环实现
    //定义一个变量,记录累加求和
    int sum = 0;
    //定义初始化表达式
    int i = 1;
    //使用while循环让初始化表达式的值变化
    while(i<=100){
        //累加求和
        sum += i ;
        //步进表达式改变变量的值
        i++;
    }
    //打印求和的变量
    System.out.println("1-100的和是:"+sum);
}

注意:控制变量语句不能忘记,否则会出现死循环。

3. do...while语句

格式:

初始化表达式①
do{
    循环体③
    条件控制语句④ 
}while(条件判断语句 ②); //这里有分号结束

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

举例:

public static void main(String[] args) {
    int x=1;
    do {
      System.out.println("HelloWorld");
      x++;
    }while(x<=10);
}

注意:

  • while后边一定要有分号结束

  • 无论条件是否满足都会先执行一次循环体,然后再去根据判断是否继续执行。

4. 嵌套循环

嵌套循环是指一个循环语句中再定义一个循环语句的语法结构。

for嵌套循环格式:

for(初始化表达式①; 循环条件②; 控制条件语句⑦) {   //分针    
    for(初始化表达式③; 循环条件④; 控制条件语句⑥) {	//秒针        
      	执行语句⑤;        
    }        
}

执行流程:

假如外层循环执行2次,内循环执行次数2次执行顺序:

第一次循环:①②>③④⑤⑥>④⑤⑥>④

第二次循环:⑦②>③④⑤⑥>④⑤⑥>④>⑦②

5. 跳转语句

调整语句主要有两个:break和continue

break:

使用场景:终止switch或循环

这里主要说一下在循环语句中的作用,当出现在循环语句中,作用就是终止并跳出循环,继续执行循环结构后边的代码:

while循环举例:

public static void main(String[] args){
    int x=1;		//定义变量x,初始值为1
    while(x<=10){	//循环条件      
        if(x==3){	//跳出循环的条件是当x==3的时候
            break;	//跳出循环
        }
        System.out.println("x="+x);//条件成立,打印x的值       
        x++;		//x进行自增
    }
}
//不加break将会执行10次,加了break当x==3时候就跳出循环

for循环中举例:

public static void main(String[] args){
    for(int x=1;x<=10;x++){	
        System.out.println("x="+x);//打印x的值
        if(x==3){	//跳出循环的条件是当x==3的时候
            break;	//跳出循环
        }
    }
}

特别注意:当break语句出现在嵌套循环中的内层循环是,它只能跳出内层循环,如果想跳出到外层循环需要在外层循环的关键字前添加标记,然后跳转到标记,这样才能跳出外层循环。

public static void main(String[] args) 	{
		int y=1;
		demo: while(y<10) {                       
			for(int x=1; x<=9; x++) {                
				 System.out.println("x="+x);//打印x的值                
				if(y==3) {	//跳出循环的条件是当x==3的时候                  
					break demo;	//跳出demo循环
				}                
			}                      
			y++;
		}
	}

continue:

continue是结束本次循环,继续下一次循环。

//求1-100之间的奇数的和
public static void main(String[] args) {
    int sum=0;    
    for (int i = 1; i <= 100; i++) {
        if(i % 2==0){  
         	//如果是偶数,结束本次循环
          	continue;
        }
        sum+=i;//不断累加                
    }
    System.out.println(sum);
}