Java漫谈5

吴军老师有在他的《硅谷来信》中分享过他对于人工智能的看法,吴老师就认为,人工智能不会发展成黑客帝国的那种恐怖境地,原因是当初科学家在创立计算机之前先把人类要解决的事情分成了两类,一类是通过固定的步骤能得到答案的,另一类是无法通过确定的步骤得到准确答案的。而计算机的出现,就是为了提升解决前一种问题的效率和速度。

对于这种划分,仁者见仁智者见智。不过,我们先假定这种分法的正确性,那么,对计算机而言,它的出现,就是在替代人,做一些固定化流程的事情。比如从1+……+100这样的活,虽然我们也有高斯公式可以不用繁琐地一次次累加,但是尽管我们动用公式,也赶不上计算机累加的速度。而在这个累加的过程中,我们不会手动地每次都输入值,而是告诉计算机,你要从多少开始累加,到多少的时候停止累加,而这个过程就是传说中的流程控制。

所谓的流程控制,可以粗略地理解为,判断与循环的排列组合。为什么这么说呢,还是回到之前的累加的功能上,先不管任何的编程语句,就仅仅对这个过程做一个简单地抽象,我从哪个数开始加,加到哪个数的时候输出。那么把这个过程再整理一下就是,我需要判断开始和结束的点,剩下的就交给循环解决。这其中,判断归判断语句管理,循环归循环语句管理。

再细化一下,如果就是求从1+…+100,那么我们的任务可以拆分判断什么时候开始,判断什么时候循环,判断什么时候结束三部分。再细一步,就是从1开始,经过不断循环,累加到100结束。所以一个简单的for循环就此出现。大致如下

for(int i=1; i<101; i++){
    //your code ...

}

这里的i就像一个旁观者一样,冷眼旁观每一次的循环。但如果并不知道循环的次数,只知道循环体中的某一个变量本身就是一个判断条件的时候,for循环的写法就会显得繁琐,繁琐有二,其一为for的无限循环表示方法比较变扭,其二为for循环里面还要再套一层if判断,其简洁程度就不高了。就以喝水为例,我其实更加关心的是有没有喝饱这个状态,并不关心喝了几次,于是,用for语句就会出现上面的两个繁琐,而用while语句则会显得较为简洁,具体如下:

//for循环描述
for(;;){
    if(饱了么){
        break;
    }else{
        继续吃();
    }
}
//while循环描述
while(饿了么){
    继续吃();
}

你要是真的饿了一天的话,那么肯定是看到饭想都不想就会先吃,然后再判断有没有吃饱,这个时候,while循环就要变成do-while循环,因为do-while与while刚好相反,第一次的时候不判断,直接执行。代码如下:

do{
    继续吃();
}while(饱了么);

不过就目前来看,for循环用的最多,while循环会在自定义定时器这种情况下用一下,do-while循环就用得更少了。除了一般的计数,累加这样的重复性数学运算或者说是数学公式里会用到之外,其余用的多的是在集合中运用,那个时候,增强for循环会用得逐渐多起来,不过在那种情况下,for循环也是可以继续用的。增强for循环我们在谈到集合的时候再聊。此外,这只是我做到目前为止的遇到的比例,每个行业不同,比例也不同。根据自己的工作经验整理出一套自己的概率排布才更重要。

今天我们聊了一下流程控制语句,希望能让你对流程控制有一个新视角的理解,我们下回见。

原文发布于微信公众号 - 怀英的自我修炼(hydzwxl)

原文发表时间:2017-10-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LinkedBear的个人空间

【挑战剑指offer】系列03:逆序打印单链表

本系列的算法原题来自于“牛客网-剑指offer”,写这个板块,不仅仅是解决算法问题本身,更是手动提高难度、自行变式,思考更多的解决方案,以带给自己一些启发。

751
来自专栏程序员的SOD蜜

“法天象而应四时”--茶话软件开发之“抽象”(2)--过程的抽象:函数

本想写这样的一个系列的,无奈一直没有时间,没想到网上已经有人写了类似的文章,说明了我原来的观点: 函数既是过程的抽象! 当然,函数的抽象意义远非如此简单,这里先...

2019
来自专栏极客猴

用 Python 学习数据结构, 有它就不用愁

数据结构,我们对它已经是耳熟能详。对于计算机相关专业的大学生来说,它是一门专业必修课。从事软件开发的人员则把它作为谋生必备技能。这充分体现数据结构的重要性。因此...

662
来自专栏数据结构与算法

洛谷2017 5月月赛R1

我只想说面对这种难度的题目就是冲着20%的数据暴力。。。 分数:40+20+36.1+38+0+19 T1 签到题 III 题目背景 pj组选手zzq近日学会了...

2695
来自专栏C语言C++游戏编程

「C语言」编程学习—控制语句goto语句解析!

C语言共有9种控制语句:if/else,for,while,do-while,switch/case,break,continue,return,goto。

1183
来自专栏python学习之旅

算法笔记(七):复杂度分析(一)

   以输入规模n为自变量建立的时间复杂度实际上还是较复杂的,例如an2+bn+c+1,不仅与输入规模有关,还与系统a、b和c有关。此时对该函数进一步抽象,仅考...

1334
来自专栏C语言及其他语言

[每日一题]台球碰撞

今天这题可大有来头了,湖南省第六届大学生计算机程序设计竞赛题目,比较经典也比较有名 题目描述 在平面直角坐标系下,台球桌是一个左下角在(0,0),右上...

3526
来自专栏数据结构与算法

√n求单值欧拉函数

基本定理: ? 首先看一下核心代码: 核心代码 ? 原理解析: 当初我看不懂这段代码,主要有这么几个问题: 1.定理里面不是一开始写了一个n*xxx么?为什么代...

3657
来自专栏机器学习算法与Python学习

资料 | Python的14张思维导图(可后台下载)

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 来自:AI科技大本营 下载方式请见文...

3628
来自专栏大数据文摘

手把手:四色猜想、七桥问题…程序员眼里的图论,了解下?(附大量代码和手绘)

5364

扫码关注云+社区