2.流程控制

1.流程控制分类

1.1 Java程序的执行结构

  • 顺序结构:代码从上往下,逐行依次执行。是程序的默认执行结构
  • 分支结构:程序在某一个节点遇到了多种向下执行的可能性,根据条件选择一个分支继续执行
  • 循环结构:某一段代码需要被重复执行多次

2.分支流程控制-if

2.1 if选择结构

if(布尔表达式){
	**代码块**
}
**后续代码**

2.2 if else选择结构★

if(布尔表达式){
	**代码块1**     //如果代码块1(代码块2)中只有一句代码,则其{}可省 略;但出于规范,一般不省略
}else{
	**代码块2**
}
**后续代码**

2.3 多重if选择结构

if(布尔表达式){
	**代码块1**   
}else if(布尔表达式2){
	**代码块2**
}else{
	**代码块3**
}
**后续代码**

2.4 嵌套if选择结构

if(外层表达式){
	if(内层表达式){
    	内层代码块1
    }else{
    	内层代码块2  
    }
}else{
	外层代码块
}

3.分支流程控制-switch

3.1 语法

switch(variable){
    case 1: 代码块;break;
    case 2: 代码块;break;
    ……
    default: 未满足时的代码;break;
}

3.2 基本逻辑

  • variable是一个非浮点类型的变量
  • 如果variable的值和某一个case匹配成功,则执行这个case后面的代码段
  • 如果variable的值和每一个case都不匹配,则执行default后面的代码段

3.3 穿透性

  • 当匹配的case被执行后,并不会自动退出整个结构,而是继续向下贯穿执行
  • 贯穿执行特性的应用:可避免冗余
  • break关键字可在匹配的case执行后执行,直接跳出整个结构

3.4 注意

  • case 1 、case 2 、…… 、default的顺序可以互换,不影响执行
  • case值不可以重复

4.循环流程控制-for

4.1 语法

for(初始部分 ; 循环条件 ; 迭代部分){
	循环部分;
}

4.2 执行流程

  • 先执行初始部分(仅执行一次)
  • 判断循环条件,若成立,则执行循环体循环体执行完毕后,再执行循环条件
  • 直到循环条件结果为false,此处循环结束,退出循环结构

4.3 特殊语法

  • 循环小括号内()的每一步都可以省略

    for(int i = 1 ; i < 100 ; 1++){
    	System.out.print(i);
    }
    
    int i = 1;
    for( ; ; ){
    	System.out.print(i);
    	i++
    	if(i < 100){
    		break;
    	}
    }
    
  • 如果循环体中的代码只有一行,则大括号{}可以省略

5.循环流程控制-while

5.1 语法

while(布尔表达式){
	//循环体
}

5.2 执行逻辑

  • 当布尔表达式为真时,执行循环体

5.3 for循环与while循环的区别

  • for循环:循环次数可预期
  • while循环:循环次数不可预期,但有明确的循环结束条件

5.4 do-while循环

do{
    循环语句
}while(布尔表达式);  
  • 无论循环条件是否成立,均会执行一遍循环体
  • 适用于首次没有入口条件、循环次数不明确的情况

6.continue、break关键字

6.1 break

  • 终止、跳出switch、循环结构(用于循环和switch结构中)
import java.util.Scanner;
/**
*通过控制台输入5个成绩,然后计算平均分;若输出成绩非法,弹出提示,程序结束
*/
public class TestWork1{
	public static void main(String[] args){
		double sum = 0D;
		Scanner input = new Scanner(System.in);
		boolean flag = true;//代表成绩合法
		
		for(int i = 1; i <= 5; i++){
			System.out.print("请输入第" + i + "个分数:");
			double score = input.nextDouble();
			
			if(score > 100 || score < 0){
				flag = false; 
				break;
			}
			
			sum += score;
		}
		
		if(flag){  //相当于flag == true
			double mean = sum/5;
			System.out.println("平均分为:" + mean);
		}else{
			System.out.println("输入成绩有误");
		}
		
	}
}

6.2 continue

结束本次并进入下一次循环(只能用于循环语句中)

import java.util.Scanner;

/**
*通过控制台输入5个成绩,然后计算平均分;若输出成绩非法,弹出提示,并可纠正输入
*/
public class TestWork2{
	public static void main(String[] args){
		double sum = 0D;
		Scanner input = new Scanner(System.in);
		
		for(int i = 1; i <= 5; ){  //把迭代部分放到下面
			System.out.print("请输入第" + i + "个分数:");
			double score = input.nextDouble();
			
			if(score > 100 || score < 0){
				System.out.println("输入成绩有误,请重新输入!");
				continue;
			}
			
			sum += score;
			i++;//为了保证出现非法数据时,不影响迭代次数
		}
		
		double mean = sum/5;
		System.out.println("平均分为:" + mean);

	}
}

6.3 循环标签

  • 如果关键字写在了嵌套循环语句中,只对当前的循环生效

  • 如果希望在内层循环中使用continue、break,使其对外层循环生效,需要用到循环标签,可使关键字作用于标签之内的循环

备注

1.用循环写斐波那契数列

2.用递归写斐波那契数列时,输出前1000个数字,效率太低

posted @ 2020-04-13 16:55  Aengus  阅读(111)  评论(0)    收藏  举报