【JAVA】第四章 流程控制

第四章 流程控制

😶本章重点内容:

1.流程控制之分支结构

2.流程控制之循环结构

4.1 流程控制概述

1.流程控制:控制代码的执行顺序。
2.流程控制的分类:
 顺序结构:从上到下,从左到右依次执行
 
 分支结构:根据条件选择执行路径
     代码特点:写得多,执行的少
     语句实现:if条件语句三种格式,if,if……else,if……else if……else
              Switch开关选择语句;
 
 循环结构:相同相似的代码逻辑在符合条件的情况下,可以多次反复的执行。
          代码特点:写得少,执行的多
          语句实现:for循环,while循环,do while循环,continue继续语句,break终止语句。

😂顺序结构案例,依次打印:

class Demo01 {
 public static void main(String[] args) {
     int a = 1;
     int b = 2;
     int c = 3;
     System.out.println(a);
     System.out.println(b);
     System.out.println(c);
 }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4XAKimNH-1638091058567)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20211124003817632.png)]

4.2 分支结构

4.2.1 分支结构之if条件语句

01 if-if
1.格式:
   if(布尔表达式) {
      语句体;
   }
   
2.说明
     1)if:关键字,表示如果
     2)if语句后面的小括号中是布尔表达式,返回true或者false。
     3)语句体:可以是任意逻辑代码。
3.执行流程:
        1)计算布尔表达式的值,要么是true,要么是false
        2)若为true,执行语句体;
        3)若为false,不执行语句体
        
4.注意点:小括号后面不要加分号;
         如果语句体只有一句代码可省去大括号,但建议任何情况都加上{}.
  

😚案例:

1.题目:某公司现在要给员工进行薪资调整, 工作年龄大于等于5年, 加薪3000元工龄不够5年的, 没有加薪使用Scanner输入工作年限,使用salary表示员工基本薪资
2.梳理题目:
        1)某公司现在要给员工进行薪资调整, 
        2)工作年龄大于等于5年, 加薪3000元,
        3)工龄不够5年的, 没有加薪
        4)使用Scanner输入工作年限
        5)使用salary表示员工基本薪资

程序:

import java.util.Scanner;//Scanner键盘录入随机数

class Demo01 {
 public static void main(String[] args) {
     int salary = 5000;
     Scanner sc = new Scanner (System.in);
     int year = sc.nextInt();
     System.out.println( "当前工龄:" + year);
     if(year > 5) {
         salary += 3000;
        System.out.println( "加薪3000" +"  " + "最终薪资" + salary);
     }
     if(year < 5) {
         System.out.println( "没有加薪");
     }

 }
}

结果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gKC9FlKL-1638091058568)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20211124011856363.png)]

02 if语句-if……else
1.格式:
    if(布尔表达式) {
       语句体体1;
    }else {
       语句体2;
    }
    
    
2.执行流程:
  1)计算条件表达式的值,要么为true,要么为false。
  2)若条件表达式值为true,执行语句体1,
  3)若条件表达式为false,执行语句体2.
  
3.注意事项:
  1)else是关键字,表示其他,是除了if条件之外的所有其他。
  2)if中的语句体1和else中的语句体2,一定会执行其中一个,不可能全执行或者全不执行
    

案例:

案例2: 某公司现在要给员工进行薪资调整, 工作年龄大于等于5年, 加薪3000元, 工龄不够5年, 加薪1000元
import java.util.Scanner;

class Demo01 {
 public static void main(String[] args) {
     int salary = 5000;
     Scanner sc = new Scanner (System.in);
     int year = sc.nextInt();
     System.out.println( "当前工龄:" + year);
     if(year > 5) {
         salary += 3000;
        System.out.println( "加薪3000" +"  " + "最终薪资" + salary);
     }
     else{
         salary += 1000;
         System.out.println( "加薪1000" +"  " + "最终薪资" + salary);
     }

 }
}

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q6V9zZbK-1638091058568)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20211124141339953.png)]

03 if语句-if…else if …else
1.格式(多支判读):
    if(条件表达式1) {
       语句体1;
    }else if(条件表达式2) {
       语句体2;
    }else if(条件表达式3) {
       语句体3;
    }
    ...
    else if(条件表达式n) {
       语句体n;
    }else {
       语句体n + 1; 
    }
    
2.执行流程:
   1)计算条件表达式1,如果为true,就执行语句体1
   2)如果条件表达式1为false,计算条件表达式2,如果为true,就执行语句体2
   3)如果条件表达式2为false,就计算条件表达式3...
   4)如果条件表达式1~条件表达式n全都为false,那么就执行语句体n+1
   
3.注意:最后的else语句可以有,也可以没有,如果有,语句体1~n+1,一定会执行其中一句。如果没有,可以一句都不执行。      

案例:

案例3: 某公司现在要给员工进行薪资调整,根据工龄决定涨薪级别
 1)[0-5): 涨薪2000元
 2)[5-10): 涨薪3000元
 3)[10-15): 涨薪4000元
 4)[15,以上): 涨薪5000元
import java.util.Scanner;

class Demo01 {
 public static void main(String[] args) {
     int salary = 5000;
     Scanner sc = new Scanner (System.in);
     int year = sc.nextInt(); 
     if(year >= 0 && year < 5) {
         salary += 2000;
     }else if (year >= 5 && year < 10) {
         salary += 3000;
     }else if(year >= 10 && year < 15) {
         salary += 4000;
     }else {
         salary += 5000;
     }
System.out.println("当前工龄" + year + "  " + "最终工资" + salary);
 }
}

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mTYf7cQa-1638091058570)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20211124143113806.png)]

4.2.2 分支结构之switch开关语句

01 基本语法
1:switch: 表示英文中的开关,每个条件都像一扇门,开着的,就进门执行,否则就到下一扇门判断.
2.格式:
  switch(表达式) {
     case 常量1:
          语句体1;
          break;
     case 常量2:
         语句体2;
          break;
     case 常量3:
          语句体3;
          break;
          ...
     case 常量n:
         语句体n;
          break;
      default:
          语句体n+1; 
 }
 
3. 关键字解释:
        switch: 开关;
        case: 情况;
        break: 破坏,退出,结束;
        default: 默认;
4.执行流程:
    1)计算switch小括号中表达式的值,分别和case后的各个常量值匹配
    2)如果和常量1匹配,那么就执行语句体1,执行break,switch语句结束
    3)如果和常量1不匹配,那么就判断是否和常量2匹配,如果匹配就执行语句体2,执行break,s
    4)以此类推,如果常量1~常量n全都没有和表达式的值匹配,那么就执行default中的内容
    
 

😁案例1:

案例4: 键盘录入一个整数,用于进行星期匹配,数据范围1-7,对应匹配星期一到星期天,如果不是1-7范围,那么报出数据错误提示信息
import java.util.Scanner;

class Demo01 {
 public static void main(String[] args) {
     Scanner sc = new Scanner (System.in);
     int day;
     switch(day = sc.nextInt(7)) {
         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("您输入的信息有误");
     }

 }
}

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TJpSz5DX-1638091058570)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20211124145612749.png)]

😂案例2:

案例4: 键盘录入一个字符串:星期?,用于进行星期匹配,数据范围常量也是字符串,对应匹配打印星期几对应做什么事情?
import java.util.Scanner;

class Demo01 {
 public static void main(String[] args) {
     Scanner sc = new Scanner (System.in);
     String day;
     switch(day = sc.next()) {
         case "星期一":
         System.out.println("星期一吃饭");
         break;
         case "星期二":
         System.out.println("星期二喝水");
         break;
         case "星期三":
         System.out.println("星期三唱歌");
         break;
         case  "星期四":
         System.out.println("星期四跳舞");
         break;
         case "星期五":
         System.out.println("星期五画画");
         break;
         case "星期六":
         System.out.println("星期六逛街");
         break;
         case "星期天":
         System.out.println("星期天运动");
         break;
         default:
         System.out.println("您输入的信息有误");
     }

 }
}

结果:

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KvgJEB24-1638091058571)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20211124150230592.png)]

02 switch注意事项
1.switch小括号表达式数据类型:是byte, short, char, int,枚举类型,
   String类型
2.数值型的只可以是 int 类型,但是 byte, short, char 都可以自动转换成int型。
3.case后面只能跟常量,不能跟变量
4.
        1)每个case语句体后面, 要跟上一个break语句,否则就无法结束switch语句,并且发生case穿透
        2)case穿透的利用: 多个case情况如果是相同的执行逻辑,可以在最后一个case语句后再使用
        3)在switch语句中,如果case的后面不写break,也就不会再判断下一个case的值,直接向后寻找一切可执行语句运行,直到遇到break,或者整体switch结束.
   
5.default语句: 可以写也可以不写.如果不写,就有可能一个语句都执行不到,建议把default语
6.default语句可以写在任意位置,无论写在什么位置,都是最后去匹配,建议把default语句写在
7.switch语句结束的条件: 遇到break语句; 遇到switch语句右大括号   

4.2.3 if 判断的使用总结

 if if-else else-if switch 写代码中如何使用
2.# 如果有一个判断且不一定需要结果 选择 if
3.# 如果有一个判断必须需要结果 选择 if-else
4.# 如果判断条件不固定(范围筛选),且一定需要结果 else-if
5.# 如果判断条件固定(且单个条件-常量筛选),且一定需要结果 switch case

4.3 循环结构

4.3.1循环结构基本语法
1.循环 : 如果代码中有重复或者相似的逻辑,可以不用写多次, 使用循环结构, 实现代码在符合条件场景下 ,多次运行
2.循环结构有3种:😁for循环,😂while循环。do...while循环。
4.3.2 for循环
1.格式:
   for (初始化语句 ; 循环判断条件 ; 初始化语句的变化) {
        循环体语句; 
   }
   
2.说明:   
        1)初始化语句: 声明一个变量,用于记录循环次数或记录循环起点
        2)循环判断条件: boolean类型表达式,控制循环是否继续执行的条件
        3)初始化语句的变化: 将初始化语句中声明的变量,向着循环不能执行的方向变化
        4)循环体语句: 要重复执行的逻辑内容
        
3.执行流程:
    1)执行初始化语句(循环中的初始化语句只执行一次)
    2)计算循环判断条件
    3)如果计算为false,就结束for循环
    4)如果计算为true,就执行循环体语句
    5)执行初始化语句的变化
    6)回到第2步 
    
4. 注意事项:
1)循环判断条件必须是boolean类型结果
2)左大括号之前,不要有分号,否则for循环无法控制大括号中的语句.
3)循环体语句,如果只有一句,那么大括号可以省略,但是建议所有时候都加上大括号。   

5.要求一定有一个固定临界值
单纯走循环条件只要不达到临界值就继续
尽量在循环条件中,更加有意义

😋案例1: 打印数字1-5

import java.util.Scanner;

class Demo01 {
 public static void main(String[] args) {
   for(int i = 1;i <= 5;i++) {
       System.out.println(i);
   }

 }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pd6KzhIy-1638091058572)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20211124152425449.png)]

😋案例2: 打印数字5-1

import java.util.Scanner;

class Demo01 {
 public static void main(String[] args) {
   for(int i = 5;i >0 ;i--) {
       System.out.println(i);
   }

 }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FX8djX6A-1638091058573)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20211124152518775.png)]

😋案例3: 计算1-100累加和

import java.util.Scanner;

class Demo01 {
 public static void main(String[] args) {
     int sum = 0;
   for(int i = 1;i < 101 ;i++) {
       sum += i;
   }
     System.out.println(sum);
 }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4wjOgdKd-1638091058574)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20211124152759526.png)]

🙄案例:倒打印九九乘法表

public class Demo03  {
	public static void main(String args[]) {

		int i;
		int j;
		int c;
		for( i = 9; i >= 1 ; i -- ) {
			
			for(j = i;j > 0;j --) {
			c = i * j;
			System.out.print(i + "*" +  j  + "=" + c+"\t");
			}

		
		    System.out.println();
		}
	
	
	}
	
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rKdJkTuU-1638091058574)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20211124153129245.png)]

🙄案例:正打印九九乘法表

import java.util.Scanner;

class Demo01 {
 public static void main(String[] args) {
     int i;
     int j;
     int c;
     for( i = 1; i < 10 ; i ++ ) {

         for(j = 1 ;j <= i ;j ++) {
             c = i * j;
             System.out.print( j + "*" +  i  + "=" + c  + "\t");
         }

         System.out.println();//换行的作用
     }
 }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HvDfT4Nq-1638091058576)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20211124165633682.png)]

4.3.3 循环结构之while樽还
1.格式: 
初始化语句; 
    while(条件表达式) {
        循环体语句; 
        初始化语句的变化; 
    } 


2.执行流程: 
        1)初始化语句
        2)计算条件表达式,如果为false,循环直接结束
        3)如果为true,执行循环体语句
        4)执行初始化语句的变化
        5)回到第二步

3.注意事项:
        1)条件表达式必须为boolean类型
        2)左大括号之前不加分号,否则while大括号无效
        3)初始化语句的变化,不要忘记



4.jdbc中取数据需要使用while循环,不用for循环

5.while循环比for·循环更强大

😁案例1:使用while循环打印1-20

public class Demo07 
{
	public static void main(String args[]) {
	int i = 1;
	//大部分while看情况可以不给临界值
	while ( i <=20 )
	{
		System.out.println(i);
		i ++;
	}


	}
}

😁案例2:使用while打印1-100累加和

public class Demo08 
{
	public static void main(String args[]) {
	int sum = 0;
	int i = 1;
	while( i <=100 )
	{
		sum += i;
	}
	 System.out.println(sum);
    }
}

😂案例3:使用while打印1-100中所有偶数

public class Demo09 
{
	public static void main(String args[]) {
	int sum = 0;
	int i = 1;

	while( i <=100 )
	{
	if(	i % 2 ==0) {
		System.out.println(i + "偶数");
	}
		i ++;
	}
	 
    }
}
4.3.4 do……while循环
01 语法格式:
do {
    //主体部分
    循环体;
    初始化变量的变化;    
}while(条件表达式);
//条件表达式可以传true或者false
是while循环中的一个,while中可能出现一次都不执行的情况

而do……while无论什么条件都至少执行一次!!!!!因为do……while是先执行后判断.

案例1:使用do……while循环打印5次Hello World

public class Demo10{
public static void main(String args[]) {

	int i = 1;

	do  {
	System.out.println("Hello World");
	i ++;
	}while(i <=5);
	
		
    }
}

案例1:使用do……while循环语句计算1-100累加

public class Demo10
{
	public static void main(String args[]) {

	int i = 1;
	int sum = 0;

	do  {
	sum += i;
	i ++;
	}while(i <=100);
	System.out.println(sum);
		
    }
}
02 (面试题)

for ,while,do……while循环的区别

1.do while语句和其他两种语句的区别: 
1)for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行

2)dowhile语句至少可以执行一次,另外两种有可能一次都执行不了

2.while语句和for的区别: 
1) 代码层面: while语句声明的初始化变量,在while结束之后,还能继续使用;for中声明的初始化变量,在for结束之后,就无法使用了. 
2)设计层面: 循环次数确定的话,建议使用for;循环次数不确定建议使用while
03 死循环
1.死循环: 无限循环,循环永远都不停止.
2.格式: 
   1)for语句的死循环:  for ( ; ; ) {
                       循环体语句; 
                     }
   2)while语句的死循环: 常用
       while (true) {
          循环体语句;
       }

3.死循环的作用:
    1)在格式上使用了死循环,但是在循环体中,可能出现了需要循环结束的情况,准备了一些跳
    2)在服务器的设计中,希望服务器永远给我们服务下去,所以需要使用死循环.
 4.注意事项:死循环之后的代码会报错, 因为代码永远不会执行到
 5.千万不要使用for循环的死循环,很难停止
04循环跳转控制语句
(1)continue语句
1)continue语句: continue关键字, 表示继续,下一次概念; 使用在循环中, 结束本次循环,继续
2) continue 主要作用就是在循环中进行一些数据的筛选, 筛选出最符合条件的数据运行循环

案例:for循环continue 输出1-100偶数

class Demo11 
{
	public static void main(String[] args) 
	{
		for(int i = 0;i<=100;i ++) {
            //遇见奇数跳过
			if(i % 2==0) {
			continue;
			}

		System.out.println(i + "偶数");
		}
	
	}
}

while循环continue 输出1-100偶数

class Demo11 
{
	public static void main(String[] args) 
	{
		int i = 0;
		while(i <=100) {
			if(i % 2 !=0) {
				i ++;
			continue;
			}

		System.out.println(i + "偶数");
		i ++;
		}
	
	}
}

== 和 equals 的区别

	//常量在堆中常量池
//通过栈创建,值存在堆中非常量池区域
		//栈中有userNameInput这个引用
(2)break 终止语句
1.break语句: break是关键字, 表示结束, 破坏
1)终止switch语句
2)结束当前层次循环

案例:while死循环break终止 输出用户登录密码:

模拟用户登录界面,正确用户名为:123,正确的密码为:456,通过键盘录入登录所需的用户
名和密码,
如果输入数据正确,显示登录成功;如果输入数据有误,支持无限次输入用户名和密码,直到
输入正确数据,登录成功为止.
import  java.util.Scanner;
class Demo12 
{
	//常量在堆中常量池
	public static final String USERNAME = "zhangsan";
	public static final String PWD= "123";
	public static void main(String[] args)  {
			Scanner sc = new Scanner (System.in);
			//1.输出提示
		System.out.println("请按照要求输入账号和密码");
		//2.死循环
		String userNameInput ;
		String pwdInput;
		while(true) {
			//3.提示输入账号信息
			System.out.println("请输入账号");
	         userNameInput = sc.next();
			//4.提示输入密码信息
			System.out.println("请输入密码");
			 pwdInput = sc.next();
			//5.判断账号和密码是否正确
		if(userNameInput.equals(USERNAME) &&  pwdInput.equals(PWD)) 
		{

          System.out.println("登陆成功");
		   break;
		}else {
		 System.out.println("登录失败,您的账号或密码输入错误");
		 }
		
		}
		}
}

案例:for死循环break终止 输出用户登录密码

import  java.util.Scanner;
class Demo12 
{
	//常量在堆中常量池
	public static final String USERNAME = "zhangsan";
	public static final String PWD= "123";
	public static void main(String[] args)  {
			Scanner sc = new Scanner (System.in);
			//1.输出提示
		System.out.println("请按照要求输入账号和密码");
		//2.死循环
		for( ; ;) {
			//3.提示输入账号信息
			System.out.println("请输入账号");
	     String userNameInput  = sc.next();
			//4.提示输入密码信息
			System.out.println("请输入密码");
			String pwdInput = sc.next();
			//5.判断账号和密码是否正确
		if(userNameInput.equals(USERNAME) &&  pwdInput.equals(PWD)) 
		{

          System.out.println("登陆成功");
		   break;
		}else {
		 System.out.println("登录失败,您的账号或密码输入错误");
		 }
		
		}
		}
}

while更好用

cintinue 和 break 的区别

4.3.5 嵌套循环

外循环执行1次,内循环全部循环

class Demo13 
{
	public static void main(String[] args) 
	{
		for (int i = 1;i <=4 ;i ++ ) {
			for(int x = 1;x <=4 ;x ++) {
				System.out.print("*"  );
      
			}
					System.out.println();	

		}

	
	}
}


class Demo13 
{
	public static void main(String[] args) 
	{
		for (int i = 1;i <=5 ;i ++ ) {
			for(int x = 1;x <=i ;x ++) {
				System.out.print("*"  );
      
			}
					System.out.println();	

		}

	
	}
}

九九乘法表也是使用了for循环嵌套

牢记外层循环1次,内层循环全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值