流程控制

一、if分支结构

(一) 基本if分支结构

  • 作用:根据某个条件,控制某些代码执行与否
  • 语法:
if(布尔表达式){
	//当布尔表达式结果为true时,执行
}

布尔类型表达式:结果为boolean类型的表达式,也可以是值或者变量

  • 执行流程
1. 首先获取布尔表达式的结果
2. 如果布尔表达式的值为true就执行语句体
3. 如果布尔表达式的值为false就不执行语句体
4. 继续执行后面的语句内容
  • 流程图
  • java中printf输出布尔类型 java布尔类型怎么输出_布尔表达式

  • 例: 打印a/b 的结果,避免错误
Scanner sc = new Scanner(System.in);
System.out.println("请输入两个整数:");
int a = sc.nextInt();
int b = sc.nextInt();
if(b!=0){			// 如果b不等于0,在执行除法运算
	System.out.println(a/b);	//如果b==0则出现异常
}

(二) if-else 双分支结构

  • 作用:根据某个条件,选择要执行的代码
  • 语法:
if(布尔表达式){
	//当布尔表达式为true时执行
}else{
	//当布尔表达式为false时执行
}
  • 执行流程:
1.首先获取布尔表达式的结果
2.如果布尔表达式的值为true就执行if代码块
3.如果布尔表达式的值为false就执行else代码块
4.继续执行后面的语句内容
  • 流程图

java中printf输出布尔类型 java布尔类型怎么输出_System_02

  • 例:打印a/b的结果,如果b为0则打印,除数不能为0
Scanner sc = new Scanner(System.in);
System.out.println("请输入两个整数:");
int a = sc.nextInt();
int b = sc.nextInt();
if(b!=0){		//如果b不等于0 在执行除法运算
    System.out.println(a/b);		//如果b==0则出现异常
}else{
    System.out.println("出书不能为0");
}

(三) 多重if分支结构

  • 作用:依次判断,多重判断,满足不同的条件,执行不同的代码
  • 语法:
if(布尔表达式1){
	//当布尔表达式1为true时执行
}else if(布尔表达式2){
	//当布尔表达式1为false且 布尔表达式2为true时执行
}else if(布尔表达式3){
	//当布尔表达式2为false 且布尔表达式3为true时执行
}...
else{
//以上所有布尔表达式为false时执行
}

注意:其中一个布尔表达式为true时,执行代码块中的代码,执行完毕后程序之际跳出if语句结构,向下执行其他代码

  • 执行流程:
1.首先计算布尔表达式1的值
2.如果值为true就执行if代码块;如果值为false就获取布尔表达式2的值
3.如果值为true就执行else if代码块;如果职位false就获取布尔表达式3的值
4.……
5.如果没有任何关系表达式true,就执行else代码块
  • 流程图
  • 例 :从控制台输入一个分数,根据分数答应对应的评级

规则如下:

分数>=85 则打印 优
分数>=70 且 分数<85 打印 良
分数>=60 且 分数<70 打印 中
分数60分以下,打印 差
Scanner sc = new Scanner(System.in);
//从控制台接受数据
int score = sc.nextInt();
if(score>=85){	// 优:85分以上
    System.out.println("优");
}else if(score >= 70){	//良:70~84
    System.out.println("良");
}else if(score >= 60){	//中: 60~69
    System.out.println("中");
}else{	//差:60分以下
    System.out.println("差");
}

二、switch语句

  • 作用:用于等值判断,根据变量的某个值执行不同的代码
  • 语法:
switch( 变量 ){
	case 值1 : 当变量的值与值1相等时执行;
	case 值2 : 当变量的值与值2相等时执行;
	case 值3 : 当变量的值与值3相等时执行;
	…………
	default: 当变量与以上值均不相等时执行;
}
  • 支持的变量类型: byte/short/int/char/String(JDK7)
  • 例:用户输入数值,表示比赛获得的名次,打印对应的称号
    要求:
1: 打印冠军
2:打印亚军
3:打印季军
4:打印殿军
其他:打印请继续努力
Scanner sc = new Scanner(System.in);  
System.out.println("请输入名次:");  

int n = sc.nextInt();  
switch( n ){  
  case 1 : System.out.println("冠军");//等效于:if n==1  
  case 2 : System.out.println("亚军");//等效于:else if n==2  
  case 3 : System.out.println("季军");//等效于:else if n==3  
  case 4 : System.out.println("殿军");//等效于:else if n==4  
  default : System.out.println("请继续努力");//等效于:else  
}

注意:switch保留了c语言 的fall-through落空机制,当满足某个条件时,执行代码后,程序会无条件继续向下执行其他代码。

  • break 关键字
    作用: 用于switch语句的流程控制,当程序遇到break关键字时立刻跳出switch语句执行后续的代码。

例: 使用break 配合switch 语句完成等值判断操作

switch( 变量 ){  
  case 值1 : 当变量的值与值1相等时执行;break;   
  case 值2 : 当变量的值与值2相等时执行;break;  
  case 值3 : 当变量的值与值3相等时执行;break;  
  ....  
  default : 当变量与以上值均不相等时执行  
}
  • 修改案例程序
Scanner sc = new Scanner(System.in);  
System.out.println("请输入名次:");  

int n = sc.nextInt();  
switch( n ){  
  case 1  : System.out.println("冠军");break;//n==1  
  case 2 : System.out.println("亚军");break;//n==2  
  case 3 : System.out.println("季军");break;//n==3  
  case 4 : System.out.println("殿军");break;//n==4  
  default : System.out.println("请继续努力");  
}

三、补充内容

  1. 当if语句结构中只有一行代码需要执行时{ }可以省略,else if与else 同理。
    例:从控制台输入一个分数,根据分数答应对应的评价
if( score>=85 )System.out.println("优");  
else if( score>=70  )System.out.println("良");  
else if( score >=60 )System.out.println("中");  
else System.out.println("差");
  1. JDK12 支持switch表达式,可以生成一个结果
  2. JDK13 持续优化switch表达式,可以在打印语句中直接使用[预览版]
  3. JDK14 switch表达式与其他特性确认为最终版

四、局部变量

  • 概念:定义在函数(方法)内部的变量
  • 特点/注意事项:
1. 先赋值,再使用  
2. 作用范围在定义行开始,到所在代码块结束  
3. 重合作用范围内,不允许重名
  • 例:先赋值再使用
int a;  
System.out.println( a );//编译错误,未初始化(未赋值)
  • 例:作用范围在定义行开始,到所在代码块结束
int b = 10;  
if( b>= 10){  
  int a = 20;  
  System.out.println( a  );  
}  

System.out.println( a  );//编译错误:找不到符号 a(超出a变量的使用范围)
  • 例:重合作用范围内,不允许重名
int a = 10;  
//int a = 10;//编译错误:已定义 a   

if( a >= 10){  
  int b = 100;  
  System.out.println(  b );//100  
}else{  
  int b = 200;  
  System.out.println( b );//200  
}  
//两个变量b作用范围并没有重合,可以重复定义。

五、循环结构

  • 作用:通过某个条件,重复且有规律的执行代码
  • 程序执行流程:
1. 顺序执行流程:从第一行代码开始,逐行执行,直至最后一行。每行代码的执行次数:1次
2. 条件分之流程 :可能需要验证某个条件的真假选择是否执行代码。每行代码的执行次数:0~1次
3. 循环执行流程:可能需要验证某个条件的真假选择是否执行代码。每行代码的执行次数:0~n次

(一)while循环(重点)

  • 语法:
while( 布尔表达式 ){//与if语句触发机制相同
   //[循环体]当布尔表达式为true时执行   
}
  • 执行流程:
  1. 判断循环条件
  2. 执行循环体中的代码
    1~2反复执行,循环条件为 false 跳出循环结构
  3. 定义循环变量:设置循环起点
  • 在循环过程中利用循环变量的变化完成数学运算
    计算1~100的和 1+2+3+4+5.....+100
    例:分解过程
int sum = 0;//累计i变量的值
int i = 0;
    
sum+=i;//将i变量的值累加到sum变量中
i++;
    
sum+=i;
i++;
    
sum+=i;
i++;
//.......i==101结束

例:使用循环计算

int sum =  0;//累计i变量的值
int i= 1;

while( i <= 100){
  sum += i;//将i变量的值累加到sum变量中
  i++;
}
    
System.out.println( sum );//打印累和结果

例:计算1/3/5/7/9.....99的和

int sum =  0;//累计i变量的值
int i= 1;

while( i <= 100){
  sum += i;//将i变量的值累加到sum变量中
  i+=2;
}
    
System.out.println( sum );//打印累和结果

(二)do....while循环

  • 语法:
do{
    //[循环体]当布尔表达式为true时执行
}while( 布尔表达式 );
  • 执行流程:
  1. 执行循环体中的代码
  2. 判断循环条件
    1~2反复执行,循环条件为 false 跳出循环结构
  • 例:使用do...while循环打印HelloWorld 1~100
//定义循环变量
int i =  1;
do{
      
  System.out.println("HelloWorld\t"+i);
  //改变循环的值
  i++;
    
}while( i<=100  );//设置循环条件
  • while循环与do...while循环的区别:
while 循环先判断,再执行; 循环体执行次数:0~N次
do..while循环先执行,再判断;循环体执行次数:1~N次
只有在第一次循环条件为 false 时才有区别

(三)for循环(重点)

  • 语法:
for(定义循环变量; 设置循环条件; 改变循环变量的值){
  //[循环体]当布尔表达式为true时执行
}
  • 执行流程:
与whlie循环一致,只不过三要素定义在了一行
1. 定义循环变量
2. 判断循环条件
3. 执行循环体
4. 改变循环变量的值
2~4反复执行,当循环条件为 false 时跳出循环结构
  • 例:使用 for循环输出HelloWorld1~100
//    (1)        (2)      (4)
  for( int i=1;   i<=100;   i++ ){
     //(3)
     System.out.println("HelloWorld\t"+i);
  }
  
  //(1):定义循环变量
  //(2):判断循环条件
  //(3):循环体
  //(4):改变循环变量的值
  
  执行顺序:(1)/(2)/(4)/(3)
  • for循环的其他 变形写法

例:

//参照上面的for各个要素的执行顺序,我们可以对for循环进行变形后的写法
//变形一:将循环变量定义到for循环的上面
int i=0;
for(;i<10;i++){
	System.out.println(i);
}
// 变形二:在变形一的基础上,将循环条件写在循环体中的最上面
int i = 0;
for(;;i++){
    if(i<10){
        System.out.println(i);
    }else{
        break;
    }
}
// 变形三:在变形二的基础上,将对循环遍历的操作放在循环体中最后的位置
int i = 0;
for(;;){
    if(i<10){
        System.out.println(i);
    }else{
        break;
    }
    i++;
}
  • 各个循环的特点:
    while、do...while循环适用于无限次数循环,没有明确的循环次数只有结束条件
    for循环适用于有限次数循环,拥有三要素,功能层次分明,结构清晰