2、JAVA 分支结构 switch结构 for循环

1 分支结构

1.1 概述
顺序结构的程序虽然能解决计算、输出等问题
但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构

1.2 形式

在这里插入图片描述

说明:条件表达式必须是布尔表达式(关系表达式或逻辑表达式)或 布尔变量。

执行流程:

  1. 首先判断条件表达式看其结果是 true 还是 false
  2. 如果是 true 就执行语句块
  3. 如果是 false 就不执行语句块

请添加图片描述

结构 2::if...else

格式:

if(条件表达式) {
    
    
 语句块 1; }else {
    
    
 语句块 2; }

执行流程:

  1. 首先判断条件表达式看其结果是 true 还是 false
  2. 如果是 true 就执行语句块 1
  3. 如果是 false 就执行语句块 2

请添加图片描述

1.3.1 练习:商品打折案例

创建包: cn.tedu.basic
创建类: TestDiscount.java
需求: 接收用户输入的原价。满1000打9折;满2000打8折;满5000打5折

package cn.tedu.basic;

import java.util.Scanner;

/**需求:接收用户输入的原价,满1000打9折,满2000打8折,满5000打5折*/
public class TestDiscount {
    
    
	public static void main(String[] args) {
    
    
		//1.提示用户输入原价
		System.out.println("请输入商品原价:");
		//2.接收用户输入的原价
		double price = new Scanner(System.in).nextDouble();                     
		//3.计算打折后的价格
		//3.1定义变量用来保存打折后的价格
		double count = price;//初始值是商品的原价
		//3.2判断用户的打折段位并打折
		if(price >= 5000) {
    
    //满5000
			count = price *0.5;//打5折
		}else if(price >= 2000) {
    
    //满2000
			count = price * 0.8;//打折8折
		}else if(price >= 1000) {
    
    //满1000
			count = price *0.9;//打9折
		}
//		if(1000 <= price && price< 2000) {
    
    
//			count = price *0.9;
//		}else if(2000 <= price && price < 5000) {
    
    
//			count = price * 0.8;
//		}else if(price >= 5000) {
    
    
//			count = price *0.5;
//		}
		//3.3输出用户实际支付的价格
		System.out.println("您实际应该支付:"+count);
	}
}

1.3.2 练习: 统计学员得分段位案例

package cn.tedu.basic;

import java.util.Scanner;

/*本类用于判断学员分数的档位*/
public class TestScore {
    
    
	public static void main(String[] args) {
    
    
		//1.提示并接收学员的分数
		System.out.println("请输入你的分数:");
		int score = new Scanner(System.in).nextInt();
		/*90分及以上  优秀
		 *80-89 良好
		 *70-79 中等
		 *60-69 及格
		 *60分及以下 不及格 */
		
		/**为了增强程序的健壮性,如果用户输入的数据不符合规则,就结束*/
		if(score <0 || score >100 ) {
    
    
			System.out.println("输入数据不合法,请重新输入!!!");
		}else {
    
    
			//2.判断分数的段位,并输出结果
			if(score >= 90) {
    
    //大于90
				System.out.println("优秀!");
			//}else if(score>=80 && score <=89) {
    
    
			}else if(score>=80) {
    
    //[80,90)
				System.out.println("良好!");
			}else if(score>=70) {
    
    //[70,80)
				System.out.println("中等!");
			}else if(score>=60) {
    
    //[60,70)
				System.out.println("及格!");
			}else {
    
    //小于60
				System.out.println("不及格!");
			}
		}	
	}
}

练习 :

定义两个整数,分别为 small 和 big,如果第一个整数 small 大于第二个整数 big,就交换。输出显示 small 和 big 变量的值。

public class IfElseExer3 {
    
    
 public static void main(String[] args) {
    
    
 int small = 10;
 int big = 9;
 if (small > big) {
    
    
 int temp = small;
 small = big;
 big = temp;
 }
 System.out.println("small=" + small + ",big=" + big);
 } 

}

练习 :

编写程序,声明 2 个 int 型变量并赋值。判断两数之和,如果大于等于 50,打印“hello world!”

public class IfElseExer5 {
    
    
 public static void main(String[] args) {
    
    
 int num1 = 12, num2 = 32;
 
 if (num1 + num2 >= 50) {
    
    
 System.out.println("hello world!");
 }
 } 
}

2 switch结构

执行流程

第 1 步:根据 switch 中表达式的值,依次匹配各个 case。如果表达式的值等于
某个 case 中的常量值,则执行对应 case 中的执行语句。
第 2 步:执行完此 case 的执行语句以后,
情况 1:如果遇到 break,则执行break 并跳出当前的 switch-case 结构
情况 2:如果没有遇到 break,则会继续执行当前 case 之后的其它 case 中的执行语句。
—>case 穿透 … 直到遇到 break 关键字或执行完所有的 case 及 default 的执行语句,跳出当前的
switch-case 结构

2.1 概述
switch case 语句用来判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
当一个case成立,从这个case向后穿透所有case,包括default,直到程序结束或者遇到break程序才结束

2.2 形式

在这里插入图片描述

2.3 练习:数字匹配

创建包: cn.tedu.basic
创建类: TestSwitch.java

package cn.tedu.basic;
/*本类用于练习switch结构*/
/**总结:
 * 1.变量a的类型byte short char int String
 * 2.会拿着变量a的值依次与case后的值做比较,如果不加break,
 *        会向后穿透所有case,包括default
 * 3.如果设置了default“保底选项”,并且没有任何case匹配到的话,就执行default
 * 4.break与default是可选项,根据具体业务来决定加不加
 * */
public class TestSwitch {
    
    
	//1.创建程序的入口函数main
	public static void main(String[] args) {
    
    
		//2.定义一个变量
		int a = 19;
		//3.完成switch结构的测试
		switch(a) {
    
    
			case 1 : System.out.println(1);break;
			case 2 : System.out.println(2);break;
			case 3 : System.out.println(3);break;
			case 4 : System.out.println(4);break;
			case 5 : System.out.println(5);break;
			default : System.out.println(0);
		}		
	}
	
}

2.4 练习: Switch中的String类型

使用类: TestSwitch.java

package cn.tedu.basic2;
/**本类用来测试switch结构2*/
public class TestSwitch2 {
    
    
	public static void main(String[] args) {
    
    
		String day = "星期五";
		switch(day) {
    
    
			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("想吃点啥吃点啥吧~");
		}
	}
}

2.5 switch结构的注意事项

switch 语句中的变量类型可以是: byte、short、int 、char、String(jdk1.7以后支持)
switch 语句可以拥有多个 case 语句
1、每个 case 后面跟一个要比较的值和冒号,且此值的数据类型必须与变量的数据类型一致
2、当变量值与 case 语句值相等时,开始执行此case 语句的内容,执行完会判断此行代码是否有break,
3、注意如果不使用break 就会出现case穿透现象;
4、如果有,结束执行,如果没有,会继续向后执行穿透所有case,包括default
5、switch 语句可以包含一个 default 分支,该分支一般是写在switch 语句的最后
6、如果在default之前的case有break,则default不会执行

lamabada表达式在switch case中的使用

在使用lamabada表达式的时候,一定要注意需要将jdk改为jdk12或者以上的版本

请添加图片描述

package com.cy;

public class Gh {
    
    

    public static void main(String[] args) {
    
    
    
        int a=1;

        switch (a){
    
    

            case 1  -> System.out.println("今天是星期一");
            case 2  -> System.out.println("今天是星期二");
            case 3  -> System.out.println("今天是星期三");
            case 5  -> System.out.println("今天是星期五");
            default -> System.out.println("今天是星期六");
        }
        }
    }

3 循环结构

3.1 for概述
循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。
它由循环体中的条件,判断继续执行某个功能还是退出循环。
根据判断条件,循环结构又可细分为先判断后执行的循环结构和先执行后判断的循环结构。

3.2 for形式

在这里插入图片描述

3.3 for循环执行顺序

我们明明只写了一句打印语句,为什么打印了多个数字呢?
希望通过下图帮你理解for循环的执行顺序:

在这里插入图片描述

说明:

• for(;;)中的两个;不能多也不能少
• ①初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
• ②循环条件部分为 boolean 类型表达式,当值为 false 时,退出循环
• ④可以有多个变量更新,用逗号分隔

3.4 练习:打印100次slogon/打印0到10/打印10到0/打印8,88,888,8888,

package cn.tedu.basic;
/**本类用来测试循环结构for循环*/
public class TestFor {
    
    
	public static void main(String[] args) {
    
    
		//需求:打印100次自己的宣言
		//for(开始条件;循环条件;更改条件){循环体;}
		for(int i = 1;i<=100;i++) {
    
    
			System.out.println(“又不是没那条件,干就完啦!”);
		}
		//需求:打印0到10
		//for(开始条件;循环条件;更改条件){循环体;}
		//0 1 2 3 4 5 6 7 8 9 10
		//从哪开始:0
		//到哪结束:10
		//怎么变化:+1 ++
		for(int i = 0;i<=10;i++) {
    
    
			System.out.println(i);
		}
		System.out.println("**********************");
		//需求:打印10到0
		//10 9 8 7 6 5 4 3 2 1 0
		//从哪开始:10
		//到哪结束:0
		//怎么变化:-1  --
		//for(开始条件;循环条件;更改条件){循环体}
		for(int i = 10 ;i >= 0;i--) {
    
    
			System.out.println(i);
		}
		//需求:打印8,88,888,8888,
		//8 88 888 8888
		//从何开始:8
		//到哪结束:8888
		//如何变化:*10+8
		for(int i =8 ; i <= 8888 ; i=i*10+8) {
    
    
			System.out.print(i+",");//使用的是print(),打印后不换行
		}
	}
}

3.5 练习:求[1,100]以内元素之和,偶数之和,偶数个数

package cn.tedu.basic;
/*本类用于测试for循环结构2*/
public class TestFor2 {
    
    
	public static void main(String[] args) {
    
    
		//m1();
		//m2();
		m3();
	}
	/*需求:求出1-100以内所有偶数的个数*/
	private static void m3() {
    
    
		//1.定义变量用来保存偶数的个数
		int count = 0;
		//2.创建循环,依次循环1-100范围内的数
		for(int i = 1;i<101;i++) {
    
    
			//3.过滤出来要统计个数的偶数
			if(i % 2 ==0) {
    
    //说明这是一个偶数
				//4.对偶数的个数进行累计
				//count = count +1;
				count++;
				//++count;
			}
		}
		//5.打印最终统计的个数
		System.out.println(count);
	}
	/*需求:求出1-100以内所有偶数的和*/
	private static void m2() {
    
    
		//1.定义变量用来保存最终求和的结果
		int sum = 0;
		//2.创建循环,依次循环1-100范围内的数
		for(int i = 1;i <101;i++) {
    
    
			//3.过滤出来需要累加的偶数
			if(i%2 == 0) {
    
    
			//if(i%2 == 1) {//过滤奇数
				//4.能进来,说明是偶数,累加
				sum = sum +i;
			}
		}
		//5.在for循环结束以后,打印所有偶数累加的和
		System.out.println(sum);
	}
	/*需求:求出1-100以内所有数的和*/
	private static void m1() {
    
    
		//1.定义一个变量用来保存求和的结果
		int sum = 0;
		//2.创建循环,依次循环1-100范围内的数
		for(int i = 1;i<=100;i++) {
    
    
			//3.将本轮循环到的数字累加到最终的结果中
			sum = sum + i;
		}
		//4.打印最终累加的结果
		System.out.println(sum);
	}
}

4 拓展
如果你想查看循环到底是什么执行的话,还可以使用工具:

猜你喜欢

转载自blog.csdn.net/weixin_58276266/article/details/131460443