Java的选择结构详解

Java的选择结构

一 . Java的执行语句

1.顺序语句:方法中的代码从上往下执行
2.分支语句:根据不同的条件,指定不同的功能
2.1 if分支
2.2 switch分支
3.循环语句:条件成立,就重复性的执行某个功能
3.1 for循环
3.2 while循环
3.3 do-while循环
4.特殊的流程控制语句
4.1 break
4.2 continue
4.3 return
4.4 lable

二. if分支

2.1 简单的if分支

语法结构:

			if(表达式){
				...代码块...
			}
			

理解:表达式的结果必须是boolean类型
true - 执行代码块
false - 跳出if分支

案例:如果麻生希的Java考试成绩大于98分,
麻生希就能获得一辆法拉利作为奖励

		public static void main(String[] args){
		
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入成绩:");
		double score = scan.nextDouble();
		
		if(score > 98){
			System.out.println("奖励麻生希法拉利玩具赛车一辆");
		}
		
	}
}

2.2 复杂的if分支

案例一: 人类的健康值在20-25的数值内为健康
(健康值算法为:体重(Kg) / 身高(米)的平方)

			//1.输入体重和身高
			Scanner scan = new Scanner(System.in);
			System.out.println("请输入体重(Kg):");
			double wigth = scan.nextDouble();
			System.out.println("请输入身高(M):");
			double heigth = scan.nextDouble();
			
			//2.计算健康值
			double health =  wigth/(heigth*heigth);
			
			//3.判断
			if(health>20 && health<25){
				System.out.println("小护士说:\"健康,继续保持\"");
			}

案例二:小西满里惠Java成绩大于98分,而且音乐成绩大于80分,老师奖励他;
或者Java成绩等于100分,音乐成绩大于70分,老师也可以奖励他。

			Scanner scan = new Scanner(System.in);
			System.out.println("请输入Java成绩:");
			double javaScore = scan.nextDouble();
			System.out.println("请输入音乐成绩:");
			double musicScore = scan.nextDouble();
			
			if((javaScore>98&&musicScore>80) || (javaScore==100&&musicScore>70)){
				System.out.println("奖励小西满里惠 仙女棒一根");
			}

总结:
1.if可以判断区间
2.if可以判断复杂的条件
3.变量的驼峰命名法:除了第一个单词,其余的单词首字母大写

2.3 if…else…

语法结构:

			if(表达式){
				...代码块...
			}else{
				...else代码块...
			}

理解:
表达式的结果必须是boolean
true - 执行代码块
false- 执行else代码块

案例:如果水菜丽Java考试成绩大于98分,
老师就奖励他一个劳斯莱斯,否则老师就罚他进行编码

			Scanner scan = new Scanner(System.in);
			System.out.println("请输入Java成绩:");
			double score = scan.nextDouble();
			
			if(score > 98){
				System.out.println("奖励水菜丽劳斯莱斯玩具赛车一辆");
			}else{
				System.out.println("给水菜丽通宵补课~~~");
			}

总结:
二选一的需求时考虑使用if…else…

2.4 if…else if…

语法结构:

			if(表达式1){
				...代码块1...
			}else if(表达式2){
				...代码块2...
			}else if(表达式n){
				...代码块n...
			}else{
				...else代码块...
			}

理解:
表达式的结果必须是boolean
从上往下依次判断表达式,哪个表达式先为true,就执行对应的代码块
所有的表达式都不为true,就执行else代码块
注意:else{}根据需求可写可不写

案例一:人类的健康值在
15-20的数值内为偏瘦
20-25的数值内为健康
25-30的数值内为偏胖
(健康值算法为:体重(Kg) / 身高(米)的平方)

//输入体重、身高
			Scanner scan = new Scanner(System.in);
			System.out.println("请输入体重(Kg):");
			double wigth = scan.nextDouble();
			System.out.println("请输入身高(M):");
			double heigth = scan.nextDouble();
			
			//计算健康值
			double health =  wigth/(heigth*heigth);
			
			//判断
			if(health > 15 && health<=20){
				System.out.println("健康医生对你说:\"偏瘦,多吃点东西\"");
			}else if(health > 20 && health <= 25){
				System.out.println("健康医生对你说:\"健康,继续保持\"");
			}else if(health > 25 && health <= 30 ){
				System.out.println("健康医生对你说:\"偏胖,多做运动,嘿嘿嘿~~~\"");
			}else{
				System.out.println("健康医生对你说:\"健康值异常,请到医院详细检查\"");
			}

案例二:通过键盘录入学生成绩

​ 如果在90-100之间,则打印“A”,
​ 否则如果在80-90之间,则打印“B”,
​ 否则如果在70-80之间,则打印“C”
​ 否则如果在60-70之间,则打印“D”
​ 否则如果在0 -60之间,则打印“E”
​ 否则打印“成绩异常”

			Scanner scan = new Scanner(System.in);
			System.out.println("请输入成绩:");
			double score = scan.nextDouble();
			
			if(score >= 90 && score <= 100){
				System.out.println("A");
			}else if(score >= 80 && score < 90){
				System.out.println("B");
			}else if(score >= 70 && score < 80){
				System.out.println("C");
			}else if(score >= 60 && score < 70){
				System.out.println("D");
			}else if(score >= 0 && score < 60){
				System.out.println("E");
			}else{
				System.out.println("成绩异常");
			}

总结:
多选一的需求时考虑使用if…else if…

2.5 嵌套if分支

案例:千锋举行运动会,百米赛跑跑入16秒内的学生有资格进决赛,
根据性别分别进入男子组和女子组。

		public static void main(String[] args){
		
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入成绩:");
		double score = scan.nextDouble();
		
		if(score > 0 && score < 16){
			
			System.out.println("请输入性别:");
			String sex = scan.next();//输入字符串
			if(sex.equals("男")){//判断sex和"男"这两个字符串内容是否相等
				System.out.println("恭喜进入到男子组决赛");
			}else if(sex.equals("女")){//判断sex和"女"这两个字符串内容是否相等
				System.out.println("恭喜进入到女子组决赛");
			}else{
				System.out.println("性别异常");
			}
		}else if(score >= 16){
			System.out.println("重在参与");
		}else{
			System.out.println("成绩异常");
		}

总结if:
语法的区别:
if(){}:最简单的if
if…else…:二选一
if…else if…:多选一
if可以无限层嵌套
应用场景:
可以判断单个值
可以判断区间
可以判断复杂的条件

三. switch分支

语法结构:

				switch(表达式){
				case1:
					...代码块1...
				break;
				case2:
					...代码块2...
				break;
				case 值n:
					...代码块n...
				break;
				default:
					...default代码块...
				break;
			}

理解:
表达式的结果可以是:byte、short、int、枚举(JDK1.5)、String(JDK1.7)
分别和值1、值2、值n比较,哪个相等,就执行对应的代码块
break:跳出switch分支语句
default代码块类似于else{},是其余其他情况的意思,根据需求可写可不写

​ 案例:明日花绮罗参加计算机编程大赛
​ 如果获得第一名,将参加千1个月马尔代夫旅游
​ 如果获得第二名,将奖励苹果Pro笔记本电脑一部
​ 如果获得第三名,将奖励移动硬盘一个
​ 否则,晚上给明日花绮罗通宵补课

		public static void main(String[] args){
		
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入比赛名次:");
		String str = scan.next();
		
		switch(str){
			case "第一名":
				System.out.println("奖励1个月马尔代夫旅游");
			break;
			case "第二名":
				System.out.println("奖励苹果Pro笔记本电脑一部");
			break;
			case "第三名":
				System.out.println("奖励移动硬盘一个");
			break;
			default:
				System.out.println("给明日花绮罗通宵补课");
			break;
		}
		
	}
}

3.1 深入switch分支

面试题

​ case的值可以相同吗?不可以
​ default可以省略吗?可以
​ break可以省略吗?可以
​ default的位置一定要在最后吗?不一定
​ case后面值的类型可以不一样吗?可以不一样,但是必须兼容
​ 表达式值的类型可以是什么?byte、short、int、枚举(JDK1.5)、String(JDK1.7)

​ switch表达式的类型为什么只有byte、short、int、枚举(JDK1.5)、String(JDK1.7)?
​ switch表达式的结果在底层只接受int
​ byte自动转型成int
​ short自动转型成int
​ 枚举的对象系统会给他赋int值
​ String是获取的ASCII码

需求:输入年和月,输出当月的天数
闰年:被4整除且不能被100整除 或者 被400整除的年份

		public static void main(String[] args){
		
		//输入年和月
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入年:");
		int year = scan.nextInt();
		System.out.println("请输入月:");
		int month = scan.nextInt();
		int day = 0;//当月的天数
		//判断
		switch(month){
			case 1:case 3:case 5:case 7:case 8:case 10:case 12:
				day = 31;
			break;
			case 4:case 6:case 9:case 11:
				day = 30;
			break;
			case 2:
				//判断是否是闰年
				if(year%4==0&&year%100!=0 || year%400==0){//闰年
					day = 29;
				}else{//平年
					day = 28;
				}
			break;
		}
	
		//输出
		System.out.println(year+"年"+month+"月的天数为:" + day + "天");
		
		/**
			if vs switch
			
			语法结构的区别:
				if的表达式:boolean
				switch的表达式:byte、short、int、枚举(JDK1.5)、String(JDK1.7)
				
			应用场景的区别:
				if:判断单个值、区间、复杂的条件
				switch:判断单个值
		*/
	}
}

四. for循环

含义:条件成立就重复执行

好处:减少了代码的冗余(减少重复性的代码)

语法结构:
			for(表达式1;表达式2;表达式3){
				...代码块...
			}

理解:
表达式1:初始化变量
表达式2:判断条件
表达式3:更新变量

执行流程:
1.初始化变量
2.判断条件:判断条件的结果必须是boolean
2.1 true - 执行代码块,并更新变量,重复第2个步骤
2.2 false- 跳出整个循环语句

for循环变形记:
循环中声明变量的作用域只能在循环内
再循环中i++和++i没有区别

			int i = 1;
			for(;i<=5;){
				System.out.println("变形记");
				//i++;
				++i;
			}
				System.out.println(i);

理解案例1:输出1-9的数字

			for(int i = 1;i<=9;i++){
				System.out.println(i);
			}

理解案例2:输出0-9的数字

			for(int i = 0;i<10;i++){
				System.out.println(i);
			}

理解案例3:输出1~9数字中的奇数

			//解决方案1
			for(int i = 1;i<10;i+=2){
				System.out.println(i);
			}
			//解决方案2
			for(int i = 1;i<10;i++){
				if(i%2!=0){
					System.out.println(i);
				}
			}

理解案例4:输出9~1的数字

            for(int i = 9;i>0;i--){
				System.out.println(i);
			}

总结 - 理解案例:i可以从1开始也可以从0开始,更新变量可以递增也可以递减

死循环:(应该避免的)

			for(;;){
				System.out.println("用良心做教育");
			}

伪死循环:(应该避免的)

			for(int i = 0;i>=0;i++){
				System.out.println("用良心做教育");
			}	

案例1:循环录入5次int类型的数字,输出总和

Scanner scan = new Scanner(System.in);
			int sum = 0;//总和
			for(int i = 1;i<=5;i++){
				System.out.println("请输入第" + i + "个数字:");
				int num = scan.nextInt();
				sum += num;//累加
			}
			System.out.println("总和为:" + sum);

案例2:循环录入麻生希同学的5门课成绩,计算平均分

		Scanner scan = new Scanner(System.in);
		double sum = 0;//总成绩
		for(int i = 1;i<=5;i++){
			System.out.println("请输入第" + i + "门成绩:");
			double score = scan.nextDouble();
			sum += score;//累加
		}
		System.out.println("平均分为:" + (sum/5));

案例3:循环录入5次int类型的数字,输出最大值

		Scanner scan = new Scanner(System.in);
	
		System.out.println("请输入第1个数字:");
		int max = scan.nextInt();//假设第一个输入的数字为最大值
		
		for(int i = 2;i<=5;i++){
			System.out.println("请输入第" + i + "个数字:");
			int num = scan.nextInt();
			if(max < num){
				max = num;
			}
		}
		
		System.out.println("最大值为:" + max);
		
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

末、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值