当前位置: 首页 > news >正文

程序流程控制(Java)

程序流程控制(Java)



文章目录

  • 程序流程控制(Java)
    • 分支结构
      • if
      • switch 分支
      • switch 的注意事项
      • switch 的穿透性
    • 循环结构
      • for 循环
      • for 循环案例1


程序执行的几种常见形式

在这里插入图片描述


分支结构

if

if 分支

  • 根据判定的结果(真或假)决定执行某个分支的代码

if 分支的作用

  • 判断心跳是否正常
  • 判断是否有足够的余额转红包
    在这里插入图片描述

if 分支有三种格式

在这里插入图片描述

if 第一种格式
在这里插入图片描述
执行流程

  1. 首先判断条件表达式的结果,如果为 true 执行语句体,为 false 就不执行语句体

注意事项

  • if 语句中,如果大括号控制的只有一行代码,则大括号可以省略不写

if 第二种格式
在这里插入图片描述
执行流程

  1. 首先判断条件表达式的结果,如果为 true 执行语句体1,为 false 就执行语句体2

if 第三种格式
在这里插入图片描述

执行流程

  1. 判断条件1的值,如果为 true 则执行语句体1,分支结束;如果为 false 则判断条件2的值
  2. 如果值为 true 就执行语句体2,分支结束;如果为 false 则判断条件3的值
  3. 如果没有任何条件为 true,就执行 else 分支的语句体 n+1。

switch 分支

switch 分支

  • 也是匹配条件去执行分支,==适合做值匹配的分支选择,结构清晰,格式良好**
    在这里插入图片描述

执行流程

  1. 先执行表达式的值,拿着这个值去与 case 后的值进行匹配。
  2. 匹配哪个 case 的值为 true 就执行哪个 case,遇到break就跳出 switch 分支。
  3. 如果 case 后的值都不匹配则执行 default 代码。

switch 案例

  • 周一:埋头苦干,解决bug
  • 周二:请求大牛程序员帮忙
  • 周三:今晚啤酒、龙虾、小烧烤
  • 周四:主动帮助新来的女程序员解决 bug
  • 周五:今晚吃鸡
  • 周六:与王婆介绍的小芳相亲
  • 周天:郁郁寡欢、准备上班。
// 周一:埋头苦干,解决bug
// 周二:请求大牛程序员帮忙
// 周三:今晚啤酒、龙虾、小烧烤
// 周四:主动帮助新来的女程序员解决 bug
// 周五:今晚吃鸡
// 周六:与王婆介绍的小芳相亲
// 周天:郁郁寡欢、准备上班。
String weekday = "周三";
switch (weekday){
   case "周一":
       System.out.println("埋头苦干,解决 bug");
       break;
   case "周二":
       System.out.println("请求大牛程序员帮忙");
       break;
   case "周三":
       System.out.println("今晚啤酒、龙虾、小烧烤");
       break;
   case "周四":
       System.out.println("主动帮助新来的女程序员解决 bug");
       break;
   case "周五":
       System.out.println("今晚吃鸡");
       break;
   case "周六":
       System.out.println("与王婆介绍的小芳相亲");
       break;
   case "周天":
       System.out.println("郁郁寡欢、准备上班");
       break;
   default:
       System.out.println("数据有误!");
}
  1. if、switch 分支各自适合做什么业务场景?
  • if 其实在功能上远远强大与 switch。
  • if 适合做:区间匹配。
  • switch 适合做:值匹配的分支选择、代码优雅。

switch 的注意事项

switch 分支注意事项:

  1. 表达式类型只能是 byte、short、int、char,JDK5 开始支持枚举,JDK7 开始支持 String、不支持 double、float、long
  2. case 给出的值不允许重复,且只能是字面量不能是变量
  3. 不要忘记写 break,否则会出现穿透现象。

switch 的穿透性

switch 的穿透性

  • 如果代码执行到没有写 break 的 case 块,执行完后将直接进入下一个 case 块执行代码(而且不会进行任何匹配),直到遇到 break 才跳出分支,这就是 switch 的穿透性。

switch 穿透性案例(月份天数查看器)

// 需求:用户输入月份可以展示该月份的天数。
// 1、3、5、7、8、10、12月份是31天
// 2月份闰年是29天、非闰年是28天。
// 4、6、9、11月分是30天
int month = 7;
switch (month){
   case 1:
   case 3:
   case 5:
   case 7:
   case 8:
   case 10:
   case 12:
       System.out.println(month + "月是31天!");
       break;
   case 2:
       System.out.println(month + "月闰年为29天、非闰年为28天!");
       break;
   case 4:
   case 6:
   case 9:
   case 11:
       System.out.println(month + "月是30天!");
       break;
   default:
       System.out.println("数据有误!");
}
  1. 什么情况下会出现 switch 穿透现象?
  • case 中没有写 break。
  1. switch 穿透性能解决什么问题?
  • 存在多个 case 分支的功能代码是一样时,可以用穿透性把流程集中到同一处处理,这样可以简化代码。

循环结构

for 循环

for 循环

  • 控制一段代码反复执行很多次。
    在这里插入图片描述
    for 循环案例详细流程说明
// 输出3次 HelloWorld
for (int i = 0; i < 3; i++){
	System.out.println("Hello World");
}

执行的流程:

  1. 循环一开始,执行 int i = 0 一次
  2. 然后判断循环条件:0 < 3 返回 true,进入到循环体中执行输出:Hello World,然后执行迭代语句 i++,此时 i=1 了。
  3. 然后判断循环条件:1 < 3 返回 true,进入到循环体中执行输出:Hello World,然后执行迭代语句 i++,此时 i=2 了。
  4. 然后判断循环语句:2 < 3 返回 true,进入到循环体中执行输出:Hello World,然后执行迭代语句 i++,此时 i=3 了。
  5. 然后判断循环条件:3 < 3 返回 false,循环立即结束!
// 目标:学会使用 for 循环,并理解它的执行流程。
// 需求:输出3次 HelloWorld
for (int i = 0; i < 3; i++){
    System.out.println("Hello World");
}

System.out.println("-------------------");
for (int i = 0; i < 5; i++){
    System.out.println("Hello World");
}

System.out.println("-------------------");
for (int i = 1; i < 5; i++){
    System.out.println("Hello World");
}

System.out.println("-------------------");
for (int i = 1; i <= 5; i++){
    System.out.println("Hello World");
}

System.out.println("-------------------");
for (int i = 1; i <= 5; i+=2){
    System.out.println("Hello World");
}

for 循环案例1

案例:求和
需求:求 1-5 之间的数据和,并把求和结果在控制台输出。
分析

  1. 定义 for 循环,使其能够产生:1、2、3、4、5。
  2. 在循环外定义一个整数变量 sum 用于求和,循环每产生一个数,就累加到 sum 中去
  3. 循环结束后,输出求和变量即是结果。
// 需求:计算1-5的和
// 1. 定义一个整数变量用于累加数据求和
int sum = 0;
// 2. 定义一个 for 循环找到 1 2 3 4 5
for (int i = 1; i <= 5; i++){
    // i = 1 2 3 4 5
    // 3. 把循环的数据累加给 sum 变量
    /**
        等价于:sum = sum + i
        i == 1  sum = 0 + 1
        i == 2  sum = 1 + 2
        i == 3  sum = 3 + 3
        i == 4  sum = 6 + 4
        i == 5  sum = 10 + 5
     */
    sum += i;
}
System.out.println("1-5的和是:" + sum);

如何实现元素求 1-5 的和?

  • 使用循环控制输出 1-5
    for (int i = 1; i <= 5; i++) { }
  • 在循坏外定义变量 sum 累加数据。
    sum += i;

相关文章:

  • 分布式事务seata入门
  • 深度神经网络训练
  • 盒模型小知识点
  • Hbase-9-HBase操作-过滤器
  • matlab gui编程教程,matlab如何使用gui
  • win10如何禁止CDR软件访问网络的设置方法教程
  • u2 尚硅谷--Vue 脚手架
  • STM32使用库函数点灯实验
  • C# 学习笔记1 - 输入输出
  • 替代STM32的GD32,替代KEIL的Eclipse配置---连载3
  • 贪心算法及其简单习题
  • java特殊数据结构:栈Stack
  • 基于APB与I2C的多主多从架构设计
  • Visual Studio Code 自动编译 TypeScript
  • 【智能合约】——智能合约安全指南
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • Angular6错误 Service: No provider for Renderer2
  • es6(二):字符串的扩展
  • Laravel 实践之路: 数据库迁移与数据填充
  • storm drpc实例
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • TypeScript迭代器
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 关于for循环的简单归纳
  • 日剧·日综资源集合(建议收藏)
  • 手机端车牌号码键盘的vue组件
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • Java总结 - String - 这篇请使劲喷我
  • 国内开源镜像站点
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • # 透过事物看本质的能力怎么培养?
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (007)XHTML文档之标题——h1~h6
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (二)fiber的基本认识
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (三)mysql_MYSQL(三)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)树状数组
  • .net 托管代码与非托管代码
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @GetMapping和@RequestMapping的区别
  • @NestedConfigurationProperty 注解用法
  • @Service注解让spring找到你的Service bean
  • [ C++ ] STL_list 使用及其模拟实现
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149