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

《代码大全2》第16章 控制循环

前言

        “循环”是一个非正式的术语,用来指代任意一种迭代控制结构 (iterativecontrol structure)——任一能够导致应用程序反复执行一段代码的结构。常见的循环种类有 C++和 Java 中的 for、while 和 do-while, 以及 Microsoft Visual Basic 中的For-Next、 While-Wend 和 Do-Loop-While。使用循环是编程中最复杂的方面之一;知道如何以及何时使用每一种循环是创建高质量软件的一个决定性因素。

16.1 选择循环的种类

在大多数语言中,你只能用到少数几种循环。
        1、计数循环(counted loop)。执行的次数是一定的,可能是针对每位雇员执行一次。
        2、连续求值的循环(continuously evaluated loop)。 预先并不知道将要执行多少次,它会在每次迭代时检查是否应该结束。例如,它会在还有剩余资金的时候继续运行,直到用户选择了退出,或者遇到了一个错误。
        3、无限循环 (endless loop)。一旦启动就会一直执行下去。你会在心脏起搏器、微波炉以及导航控制仪等嵌入式系统里找到它。
        4、迭代器循环(iterator loop)。对容器类里面的每个元素执行一次操作。

        这些类型的循环首先是在灵活度上有差异——要么循环执行的次数是一定的,要么就在每次迭代的时候检查循环有没有完成
        这些循环还在检查循环是否执行完毕的位置上有所不同。你可以把检查放在循环的开始、中间或者结尾处。这一特征能够告诉你该循环会不会至少执行一次。

  • 如果是在循环头进行检查,那么它的循环体就不一定会执行到
  • 如果把检查放在循环尾,它的循环体就会至少执行一次
  • 如果是在循环的中间检查,那么位于检查前面的那一部分循环就会至少执行一次,但是位于检查后面的那部分循环就不一定会执行到了

        灵活度和检查位置决定了如何对用作控制结构的循环种类进行选择。表16-1显示了多种语言中的循环种类,并且描述了其灵活度和检查位置。

 16.1.1 什么时候使用 while 循环

        编程新手有时认为 while 循环会不断地求 while 条件的值,并且会在条件变成假的时候执行结束,而不论循环里面正在执行的是哪一条语句。尽管没有这些新手所想象的那么灵活,while 循环的确是一种灵活的循环选择。如果你预先并不知道循环要迭代多少次,那么就使用 while 循环。与一些编程新手所想的正相反,执行每通过这种循环一次,while 只做一次循环终止的检测,而且有关 while 循环的最主要事项就是决定在循环开始处还是结尾处做检测

1.检测位于循环的开始

        对于在开始处进行检测的循环,在 C++、C#、 Java、 Visual Basic 以及大多数其他的语言里,你可以使用 while 循环。在其他语言里,你也可以模拟 while 循环。

2.检测位于循环的结尾

        你也许偶尔会遇到这种情况:需要一个灵活的循环,但是该循环至少需要执行一次。在这种情况下,你可以用一个在结尾处做条件检测的 while 循环。在C++、C#以及 Java 里,你可以用 do-while,在 Visual Basic 里用 Do-Loop-While,或者在其他语言里模拟在末尾进行条件检测的循环。

16.2 循环控制

16.3 轻松创建循环—由内而外

16.4 循环和数组的关系

相关文章:

  • 猿创征文|Linux 管道命令Cut、sort、wc、uniq、tee、tr【一】
  • 【项目管理】DBClient
  • 猿创征文 |【C++】面向对象之微观部分——类的组成(中)
  • 微服务项目:尚融宝(24)(后端搭建:JWT令牌测试)
  • 第6章 MyBatis框架入门详解(2)
  • 【图像识别-指纹识别】指纹特征提取附matlab代码
  • 3道Java基础题
  • Docker 安装 MySQL、Redis、Nginx
  • 疫情宅在家,研究一下fastjson中字段智能匹配的原理
  • 【MapGIS精品教程】001:MapGIS K9完整图文安装教程
  • 指针和数组笔试题解析
  • 人脸检测5种方法
  • SparkSQL 总结(未完待续)
  • 51单片机入门——数模\模数转换
  • 【毕业设计】 单片机自动写字机器人设计与实现 - 物联网 嵌入式 stm32
  • ES6指北【2】—— 箭头函数
  • 【笔记】你不知道的JS读书笔记——Promise
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • iOS 颜色设置看我就够了
  • vue 个人积累(使用工具,组件)
  • Yii源码解读-服务定位器(Service Locator)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 给新手的新浪微博 SDK 集成教程【一】
  • 构造函数(constructor)与原型链(prototype)关系
  • 配置 PM2 实现代码自动发布
  • 前端学习笔记之观察者模式
  • 入门到放弃node系列之Hello Word篇
  • 使用 @font-face
  • 突破自己的技术思维
  • 一、python与pycharm的安装
  • 原生Ajax
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • zabbix3.2监控linux磁盘IO
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #DBA杂记1
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #if 1...#endif
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $.ajax()
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (rabbitmq的高级特性)消息可靠性
  • (TOJ2804)Even? Odd?
  • (备忘)Java Map 遍历
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (一)appium-desktop定位元素原理
  • (转)Scala的“=”符号简介
  • *** 2003
  • **PHP分步表单提交思路(分页表单提交)
  • .gitattributes 文件