返回第二十四章 轮回法则(中)(1 / 1)任煦之秋首页

关灯 护眼     字体:

上一章 目录 下一章

我闻言后点了点头,有了之前的应用场景做铺垫,再加上老爹说得这么仔细,所以即便老爹没有故事来借喻,我也把这个for的用法听懂了。

「老爹老爹,我发现轮回变数那部分代码完全可以放在轮回执行的内容里边啊?对不对?」

结合这老爹在画图工具上打出的那一段代码,再加上老爹给我讲解时备注的那一段文字,我得出了这么一个结论。

「的确如此!至于为什么要放在那个地方嘛,老爹不知道开发这门语言的人当时是怎么想的,所以也给不出确切的答案。」

老爹点了点头,而后笑着对我说道。

我脸一红,看来老爹已经猜到我要问什么了,得到这么一个不算答案的答案,我虽然有些不甘心,但也只好作罢。

「还有一个问题,一维数组的赋值和取值的确可以用for来完成,那二维数组怎么办呢?二维数组需要用两个轮回分别控制行和列才行啊?」

「哈哈,你自己都已经说出答案了,为什么还要问我啊?」

听了我的提问后,老爹哈哈笑道。

「我说出答案了?你是说!可是我不知道怎么使用连个轮回啊!」

我愣了一下,意识到了问题的所在。

「一分钟等于多少秒钟?」

「啊?60秒啊,怎么了?」

我原本以为老爹会给解疑,没有想到他却突然问了一个莫名其妙的问题。

「那你见过那种指针式的钟表吧?」

「嗯,我们教室里面还挂了一个呢。」

我点了点头。

「好,你看哈,秒针走一圈,分针也才走一个刻度。如果我们把一个刻度比作一次轮回的话,那么分针轮回一次,秒针要轮回60次,这个没有问题吧?」

老爹见我点了点头,又接着说道:「如果我们用一个变量min来代表分针,用给一个变量sec来表示秒针,你觉得怎么用for来表示它们的关系?」

int min = 0;

for(int sec = 0; sec < 60; sec++)

{

min++;

}

「嗯,你说得也没有错了,不过老爹想告诉你的不是这样,而是这样的:

for(int min = 0; min < 1; min++)

{

for(int sec = 0; sec < 60; sec++)

{

}

}

你看,是不是min轮回一次,sec要轮回60次?」

「可是,sec在轮回的时候,为什么min就停下来了?」

我不解道。

「你忘了,我一开始就和你说过,当for在开启轮回的时候,它所在的空间时间会停止。同样sec在轮回的时候,min的轮回也就停止了,必须等到se才能开启下一轮轮回。」

「等等,我要捋一捋这其中的关系,感觉有些混乱了。」

经过长达十分钟的思考,我总算理顺了思路,不过问了确认我是对的,我特意写了一个遍历二维数组的案例。在得到老爹的肯定后,我总算是松了一口气。

真是没有想到,就想偷懒加载一个地图而已,居然弄出了这么多幺蛾子。不过这下好了,推箱子这个游戏加载地图这一块的功能总算是要完成了。

像这种程序编写起来才有意思嘛,之前那些案例简直……

「那个……不好意思哈,还有一个知识点没有讲完,你忘了,还有一个同样掌管轮回的while呢。」

我心里正得意的时候,老爹不合时宜地浇了我一盆冷水。我刚刚那点得意瞬间消失得无影无踪,小脸苦得跟苦瓜似的。

「while的用法比for简单多了,而且刚刚已经提到它了哦!」

「我说了么?我怎么不记得了?」

我摸着下巴想了一会儿,确认自己没有说过和这个叫「while」的混沌先民相关的东西。

「你刚刚不是说for的轮回变数可以放在轮回内容里面么?如果你这么做的话,就和while的形式一样了,你看,while的格式是这样的:

while(轮回条件)

{

轮回内容;

}

如果我们同样要完成给int array[1000]赋值的话,用while就是这样:

int i = 0;

while(i < 1000)

{

array[i]= i;

i++;

}

相信我不说,你现在能知道while的特性吧?」

「嗯,的确很简单,现在应该可以继续完成加载地图的功能了吧?」

我有些迫不及待地问道。

不知道从什么时候开始,我总想赶快把这个游戏给完成了过过瘾,顺便在上电脑课的时候拿出来在班上的同学面前炫耀炫耀。

到时候大家都用惊叹、崇拜的目光看着我,这场面想想都让人激动。

「不着急,不着急。说完了while,老爹还要给你说一下while的小伙伴,do while,以及for和while命中注定的两个宿敌。从for和while出生到现在,它们俩对上它们的宿敌都从来没有赢过。」

老爹悠悠地感叹了一声。

听老爹这么一说,我感觉这不是说的我的小弦子么?我也是从来都没有赢过小弦子一次,经常会生出一种「既生瑜,何生亮?」的感叹。如此,我倒是要看看for和while的宿敌有什么能耐。

老爹见成功吸引了我的好奇心,嘴角勾起了一丝不易察觉的弧度。

「先说说do while,刚刚说的while给数组赋值的例子来说,如果一开始i 大于等于1000的话,此时while的轮回条件不成立,轮回内容一次都不会执行,对吧?」

「嗯,的确是这样。」

我点了点头。

「这个do while恰好和这个相反,因为它能够保证轮回的内容至少执行一次!其他的特性就和while一模一样了。我们先看看它的格式:

do

{

轮回内容

}

while(轮回条件);

它的执行过程是先执行do里面的轮回内容,然后再判断while中的轮回条件,成立就继续轮回,否则退出轮回。所以轮回内容一定会被执行一次。」

「嗦嘎!」

「说完了伙伴,接下来就要说它们的宿敌了。它们的宿敌有两个,一个是ue,另一个你认识——break。」

「break它不是switch的小伙伴么?怎么哪儿都有它!」

「哈哈,既然如此,我们就先说break是怎么把for和while按在地上摩擦的。其实你只要记住一句话,break会结束离它最近的for或者while的轮回。

比如:

for(int i = 0; i < 100; i++)

{

if(i == 2)

{

break;

}

}

原本这个for要轮回100次,但是在第三次的时候遇到了break,于是整个轮回就结束了。

同样的,while也是如此。之所以给你强调『最近』这两个字,是因为在多重for、while嵌套,它们相互嵌套的时候,很多初学者不知道break停掉的是谁的轮回。」

『加入书签,方便阅读』

上一章 目录 下一章