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(表达式){case 值1:...代码块1...break;case 值2:...代码块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的表达式:booleanswitch的表达式: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数字中的奇数
//解决方案1for(int i = 1;i<10;i+=2){System.out.println(i);}//解决方案2for(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);
Java的选择结构详解相关推荐
- [java] 虚拟机(JVM)底层结构详解[转]
[java] 虚拟机(JVM)底层结构详解[转] 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在以前的博客里面,我们介绍了在java领 ...
- Java单元测试之JUnit4详解
2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...
- Java编程配置思路详解
Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...
- Java基础学习总结(24)——Java单元测试之JUnit4详解
Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before ...
- java提高篇之详解内部类
转载自 java提高篇之详解内部类 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面看是非常容易理解的,无 ...
- Java JUC学习 - ConcurrentLinkedDeque 详解
Java JUC学习 - ConcurrentLinkedDeque 详解 0x00 前言 如何实现并发程序,对于Java以及其他高级语言来说都是一件并不容易的事情.在大一上学期的时候,我们学习了链表 ...
- Android4.0源码目录结构详解
Android4.0源码目录结构详解 Android4.0与2.1目录差不多 alsa这块,注意external/tinyalsa下有: include/tinyalsa/asoundlib.h mi ...
- Java内存模型(JMM)详解
在Java JVM系列文章中有朋友问为什么要JVM,Java虚拟机不是已经帮我们处理好了么?同样,学习Java内存模型也有同样的问题,为什么要学习Java内存模型.它们的答案是一致的:能够让我们更好的 ...
- Java版人脸检测详解下篇:开发java应用并做成docker镜像
本篇概览 如果您看过<Java版人脸检测上篇>一文,甚至动手实际操作过,那么你应该会对背后的技术细节感兴趣,开发这样一个应用,咱们总共要做以下三件事: 1.准备好docker基础镜像 2. ...
最新文章
- request.getParameter和request.getAttribute之间的区别
- 深度解密Go语言之unsafe
- java中哲学家就餐死锁_哲学家就餐问题与死锁总结
- Android 渗透测试学习手册 第三章 Android 应用的逆向和审计
- I.MX6 make menuconfig OTG to slave only mode
- python 对话框开发_python文件选择对话框的操作方法
- Java接口default方法思考钻石问题
- 腾达ac5第三方固件_腾达AC9官方固件增加KoolProxy版
- 扛住阿里双十一高并发流量,Sentinel是怎么做到的?
- mysql报错:check the manual that corresponds to your MySQL server version for the right syntax to use
- 测试工程师的能力分类
- 在日签证更新手续 网址
- 动画效果库 animate
- 冒充linux内核,4岁小萝莉向Linux内核贡献代码修复「漏洞」而且已经合并到内核...
- dubbo(5) Dubbo源码解析之服务调用过程
- 2019年蓝桥杯C/C++ B组试题 部分题目答案
- 线程、多线程与线程池总结
- 如何挑选最适合自己的车
- @Value(“#{}“) 与 @Value(“${}“) 的区别
- 洛谷P2657 windy 数 数位dp
热门文章
- [综]Review of bike-sharing system studies using bibliometrics method
- CrossOver配置
- ipad无法充电怎么办_ipad无法充电怎么办(学会这些办法自己解决)
- 配置 Docker 镜像加速 -小白实操记录
- delphi读音_delphi中获取汉字的拼音首字母
- 安全管理入门 七大CSO必备秘方收藏
- 技术周刊 Vol.40 - 来学习一门新的编程语言吧!
- *CTF2021部分题目解题思路及exp
- 博客数据库编写 [木字楠博客]
- CSS构造六芒星图案