文档章节

代码大全读书笔记-----16章循环控制

madbooker
 madbooker
发布于 2014/04/26 12:54
字数 1267
阅读 362
收藏 8

第16章  控制循环

1.循环的种类

循环用来指代任意一种迭代控制结构,任何一种能够导致应用程序反复执行的一段代码的结构。

循环的种类:

(1)计数循环:预先知道循环的次数。(例如常见的for循环)

(2)连续求值循环:预先不知道要执行多少次,它会在每次迭代时检查是否应该继续。(例如读取文本,直到遇到结束符时结束循环)

(3)无限循环:一旦启动一直执行下去。

(4)迭代器循环:对容器类里面的每个元素都执行一次操作。

2.循环的选择

(1)while循环

如果预先不知道要循环多少次,那么就使用while循环。

有关while循环的主要注意事项就是在循环开始还是结束处检测。

a)检测位于循环的开始

b)检测位于循环的结束 (do-while):该循环至少执行一次

(2)带退出的循环

所谓带退出的循环就是终止条件出现在循环中间而不是开始或者末尾的的循环。(在php中使用while和break来模拟)例如:

while(!endOfData())
{
$data = readDate();
if(errorData($data))  //如果出现数据错误
{
break;
}
process($data);
}


注意:为了便于调试和阅读代码,应当把所有的退出条件放在一起,同时应该用注释来阐明操作意图。

(3)for循环

如果需要一个执行次数固定的循环,那么就可以选择for循环。

注意:不要在for循环里通过直接修改下标的方式迫使循环结束。例如:

for($i=0;$i<=10;$i++)
{
if(error())
{
$i = 10;  //修改下标使循环下次不再执行   糟糕的实践
}
。。。。
}

(4)foreach循环(编程语言支持的)

适合对容器内(数组或者其他)的各项元素进行操作。


3.循环控制

1)进入循环

a)把初始化代码紧放在循环前面。

b)用while(true)表示无限循环。

当需要一个无限循环时,(例如服务器监听连接)不要采用for i=1 to 99999这样的虚假无限循环,这样会模糊循环的用意,应当使用while(true),或者for(;;)这样的循环表示。


2)处理好循环体

a)用{ }把循环体中的语句括起来。

增加代码的可读性,防止修改代码时出错。

b)避免空循环。

空循环:把循环所处理的代码和检测循环是否终止的代码写在同一行里。例如:

while( ($inputChar = data->read()) != CharType_Eof )
{
;//循环体内是一个分号,因为循环处理代码已经在上一行做了
}

这是不好的习惯,应该分开完成各部分的内容:

do
{
$inputChar = data->read();
}while($inputChar != CharType_Eof);

c)把循环内务操作放在循环的开始或者末尾。

循环内务操作是指像i=i+1或者j++这样的表达式,他们的主要目的不是完成循环工作,而是控制循环。


d)一个循环只做一件事。

3)退出循环

a)设法确认循环能够终止。

这是使用循环的基本要求。需要考虑正常的情况‘、端点、以及每一种异常情况。

b)使循环终止条件看起来很明显。

c)不要为了终止循环而胡乱改动for循环的下标。(前面提到过)


d)考虑使用安全计数器。

安全计数器可以确保循环执行的次数。例如:

while(nodeNext())
{
saftCounter++;
if(saftCounter >= LIMIT)
{
//终止循环
}
。。。。。
}



4)提前退出循环

所谓提前退出循环是指除了满足循环终止条件以外的循环终止。

a)在某些情况下,通过使用break来实现提前退出循环比使用布尔标记要好,使得程序更容易理解。


b)小心那些有很多break散步其中的循环。

一个循环中包括的break过多,有可能导致错误的退出。例如:

do
{
switch
.......
if()
{
......
break;//这个break在这里本来是要退出if的,结果连循环一起退出了。
}
}while(......);

4.检查端点

对于简单循环来说,需要注意三种情况:开始的情况、任意选择的中间情况、最终的情况,小心出现off-by-one的错误。


5.使用循环变量

(1)用整数或者枚举类型表示数组和循环边界。

(2)嵌套循环中使用有意义的变量名来提高可读性。

(3)避免下标串话。(即在嵌套的循环中用相同的下标名表示不同变量)

(4)把下表变量的作用域限制在循环以内。

  这项准则可以获得语言的内建机制的支持,例如在循环头声明下标变量:

  for($index=0;$index<MAX;$index++)
   {
........
   }

  在for循环头部声明下标,则index变量的作用域不会超出for循环。



© 著作权归作者所有

madbooker
粉丝 5
博文 12
码字总数 12254
作品 0
南京
程序员
私信 提问
【把经典读薄】《代码大全2》读书笔记之一 使用变量的一般事项

代码大全第二版 第十章 使用变量的一般事项 读书笔记 General Issues in Using Variable 把第十章作为开篇重读《代码大全》,并做好详细的读书笔记,希望它能给我全新的收获。 10.0 前言 利用...

长平狐
2012/11/12
112
0
如何用思维导图学Java编程思想

摘要:如何学习Java编程思想,基本分为21个部分,看完本文你就有答案。 width="auto" src="http://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbizjpg/Uic0S1r5o6Ou7kZN43vics5mNtYhTO4vhkOldOGnA......

bjweimengshu
2017/12/23
0
0
读书笔记之《Java并发编程的艺术》-并发编程基础

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
3.9K
8
读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
653
1
【面试总结】记一次失败的 bilibili 面试总结(2)

上一篇文章能受到这样的关注度,感谢各位同学的点赞和评论,给了我很多动力继续去更新这个系列,也希望它们能够对大家有一定的帮助。蟹蟹大家。 传送门 面试总结(1):HTML布局、CSS选择器及J...

一颗赛艇🚤
03/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EDI 电子数据交换全解指南

EDI(Electronic Data Interchange,电子数据交换)技术使得企业与企业(B2B)实现通信自动化,帮助交易伙伴和组织更快更好地完成更多工作,并消除了人工操作带来的错误。从零售商到制造商、物...

EDI知行软件
59分钟前
3
0
CentOS7的LVM动态扩容

# 问题 CentOS7上面的磁盘空间有点紧张,需要扩容。 解决 查询当前磁盘状态 [root@xxx ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTfd0 2:0 1 4K ...

亚林瓜子
今天
3
0
Kafka 0.8 Producer (0.9以前版本适用)

Kafka旧版本producer由scala编写,0.9以后已经废除 示例代码如下: import kafka.producer.KeyedMessage;import kafka.javaapi.producer.Producer;import kafka.producer.ProducerConfig;......

实时计算
今天
4
0
Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
6
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部