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的选择结构详解相关推荐

  1. [java] 虚拟机(JVM)底层结构详解[转]

    [java] 虚拟机(JVM)底层结构详解[转] 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在以前的博客里面,我们介绍了在java领 ...

  2. Java单元测试之JUnit4详解

    2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...

  3. Java编程配置思路详解

    Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...

  4. Java基础学习总结(24)——Java单元测试之JUnit4详解

    Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before  ...

  5. java提高篇之详解内部类

    转载自 java提高篇之详解内部类 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面看是非常容易理解的,无 ...

  6. Java JUC学习 - ConcurrentLinkedDeque 详解

    Java JUC学习 - ConcurrentLinkedDeque 详解 0x00 前言 如何实现并发程序,对于Java以及其他高级语言来说都是一件并不容易的事情.在大一上学期的时候,我们学习了链表 ...

  7. Android4.0源码目录结构详解

    Android4.0源码目录结构详解 Android4.0与2.1目录差不多 alsa这块,注意external/tinyalsa下有: include/tinyalsa/asoundlib.h mi ...

  8. Java内存模型(JMM)详解

    在Java JVM系列文章中有朋友问为什么要JVM,Java虚拟机不是已经帮我们处理好了么?同样,学习Java内存模型也有同样的问题,为什么要学习Java内存模型.它们的答案是一致的:能够让我们更好的 ...

  9. Java版人脸检测详解下篇:开发java应用并做成docker镜像

    本篇概览 如果您看过<Java版人脸检测上篇>一文,甚至动手实际操作过,那么你应该会对背后的技术细节感兴趣,开发这样一个应用,咱们总共要做以下三件事: 1.准备好docker基础镜像 2. ...

最新文章

  1. request.getParameter和request.getAttribute之间的区别
  2. 深度解密Go语言之unsafe
  3. java中哲学家就餐死锁_哲学家就餐问题与死锁总结
  4. Android 渗透测试学习手册 第三章 Android 应用的逆向和审计
  5. I.MX6 make menuconfig OTG to slave only mode
  6. python 对话框开发_python文件选择对话框的操作方法
  7. Java接口default方法思考钻石问题
  8. 腾达ac5第三方固件_腾达AC9官方固件增加KoolProxy版
  9. 扛住阿里双十一高并发流量,Sentinel是怎么做到的?
  10. mysql报错:check the manual that corresponds to your MySQL server version for the right syntax to use
  11. 测试工程师的能力分类
  12. 在日签证更新手续 网址
  13. 动画效果库 animate
  14. 冒充linux内核,4岁小萝莉向Linux内核贡献代码修复「漏洞」而且已经合并到内核...
  15. dubbo(5) Dubbo源码解析之服务调用过程
  16. 2019年蓝桥杯C/C++ B组试题 部分题目答案
  17. 线程、多线程与线程池总结
  18. 如何挑选最适合自己的车
  19. @Value(“#{}“) 与 @Value(“${}“) 的区别
  20. 洛谷P2657 windy 数 数位dp

热门文章

  1. [综]Review of bike-sharing system studies using bibliometrics method
  2. CrossOver配置
  3. ipad无法充电怎么办_ipad无法充电怎么办(学会这些办法自己解决)
  4. 配置 Docker 镜像加速 -小白实操记录
  5. delphi读音_delphi中获取汉字的拼音首字母
  6. 安全管理入门 七大CSO必备秘方收藏
  7. 技术周刊 Vol.40 - 来学习一门新的编程语言吧!
  8. *CTF2021部分题目解题思路及exp
  9. 博客数据库编写 [木字楠博客]
  10. CSS构造六芒星图案