首頁(yè) 現(xiàn)實(shí)

程序媛養(yǎng)成計(jì)劃

第二十四章 輪回法則(中)

程序媛養(yǎng)成計(jì)劃 任煦之秋 2101 2020-04-27 21:58:01

  我聞言后點(diǎn)了點(diǎn)頭,有了之前的應(yīng)用場(chǎng)景做鋪墊,再加上老爹說(shuō)得這么仔細(xì),所以即便老爹沒有故事來(lái)借喻,我也把這個(gè)for的用法聽懂了。

  「老爹老爹,我發(fā)現(xiàn)輪回變數(shù)那部分代碼完全可以放在輪回執(zhí)行的內(nèi)容里邊?。繉?duì)不對(duì)?」

  結(jié)合這老爹在畫圖工具上打出的那一段代碼,再加上老爹給我講解時(shí)備注的那一段文字,我得出了這么一個(gè)結(jié)論。

  「的確如此!至于為什么要放在那個(gè)地方嘛,老爹不知道開發(fā)這門語(yǔ)言的人當(dāng)時(shí)是怎么想的,所以也給不出確切的答案?!?p>  老爹點(diǎn)了點(diǎn)頭,而后笑著對(duì)我說(shuō)道。

  我臉一紅,看來(lái)老爹已經(jīng)猜到我要問(wèn)什么了,得到這么一個(gè)不算答案的答案,我雖然有些不甘心,但也只好作罷。

  「還有一個(gè)問(wèn)題,一維數(shù)組的賦值和取值的確可以用for來(lái)完成,那二維數(shù)組怎么辦呢?二維數(shù)組需要用兩個(gè)輪回分別控制行和列才行???」

  「哈哈,你自己都已經(jīng)說(shuō)出答案了,為什么還要問(wèn)我???」

  聽了我的提問(wèn)后,老爹哈哈笑道。

  「我說(shuō)出答案了?你是說(shuō)!可是我不知道怎么使用連個(gè)輪回?。 ?p>  我愣了一下,意識(shí)到了問(wèn)題的所在。

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

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

  我原本以為老爹會(huì)給解疑,沒有想到他卻突然問(wèn)了一個(gè)莫名其妙的問(wèn)題。

  「那你見過(guò)那種指針式的鐘表吧?」

  「嗯,我們教室里面還掛了一個(gè)呢。」

  我點(diǎn)了點(diǎn)頭。

  「好,你看哈,秒針走一圈,分針也才走一個(gè)刻度。如果我們把一個(gè)刻度比作一次輪回的話,那么分針輪回一次,秒針要輪回60次,這個(gè)沒有問(wèn)題吧?」

  老爹見我點(diǎn)了點(diǎn)頭,又接著說(shuō)道:「如果我們用一個(gè)變量min來(lái)代表分針,用給一個(gè)變量sec來(lái)表示秒針,你覺得怎么用for來(lái)表示它們的關(guān)系?」

  「

  int min = 0;

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

  {

  min++;

  }

  」

  「嗯,你說(shuō)得也沒有錯(cuò)了,不過(guò)老爹想告訴你的不是這樣,而是這樣的:

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

  {

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

  {

  }

  }

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

  「可是,sec在輪回的時(shí)候,為什么min就停下來(lái)了?」

  我不解道。

  「你忘了,我一開始就和你說(shuō)過(guò),當(dāng)for在開啟輪回的時(shí)候,它所在的空間時(shí)間會(huì)停止。同樣sec在輪回的時(shí)候,min的輪回也就停止了,必須等到sec輪回完成,min才能開啟下一輪輪回?!?p>  「等等,我要捋一捋這其中的關(guān)系,感覺有些混亂了?!?p>  經(jīng)過(guò)長(zhǎng)達(dá)十分鐘的思考,我總算理順了思路,不過(guò)問(wèn)了確認(rèn)我是對(duì)的,我特意寫了一個(gè)遍歷二維數(shù)組的案例。在得到老爹的肯定后,我總算是松了一口氣。

  真是沒有想到,就想偷懶加載一個(gè)地圖而已,居然弄出了這么多幺蛾子。不過(guò)這下好了,推箱子這個(gè)游戲加載地圖這一塊的功能總算是要完成了。

  像這種程序編寫起來(lái)才有意思嘛,之前那些案例簡(jiǎn)直……

  「那個(gè)……不好意思哈,還有一個(gè)知識(shí)點(diǎn)沒有講完,你忘了,還有一個(gè)同樣掌管輪回的while呢?!?p>  我心里正得意的時(shí)候,老爹不合時(shí)宜地澆了我一盆冷水。我剛剛那點(diǎn)得意瞬間消失得無(wú)影無(wú)蹤,小臉苦得跟苦瓜似的。

  「while的用法比f(wàn)or簡(jiǎn)單多了,而且剛剛已經(jīng)提到它了哦!」

  「我說(shuō)了么?我怎么不記得了?」

  我摸著下巴想了一會(huì)兒,確認(rèn)自己沒有說(shuō)過(guò)和這個(gè)叫「while」的混沌先民相關(guān)的東西。

  「你剛剛不是說(shuō)for的輪回變數(shù)可以放在輪回內(nèi)容里面么?如果你這么做的話,就和while的形式一樣了,你看,while的格式是這樣的:

  while(輪回條件)

  {

  輪回內(nèi)容;

  }

  如果我們同樣要完成給int array[1000]賦值的話,用while就是這樣:

  int i = 0;

  while(i < 1000)

  {

  array[i]= i;

  i++;

  }

  相信我不說(shuō),你現(xiàn)在能知道while的特性吧?」

  「嗯,的確很簡(jiǎn)單,現(xiàn)在應(yīng)該可以繼續(xù)完成加載地圖的功能了吧?」

  我有些迫不及待地問(wèn)道。

  不知道從什么時(shí)候開始,我總想趕快把這個(gè)游戲給完成了過(guò)過(guò)癮,順便在上電腦課的時(shí)候拿出來(lái)在班上的同學(xué)面前炫耀炫耀。

  到時(shí)候大家都用驚嘆、崇拜的目光看著我,這場(chǎng)面想想都讓人激動(dòng)。

  「不著急,不著急。說(shuō)完了while,老爹還要給你說(shuō)一下while的小伙伴,do while,以及for和while命中注定的兩個(gè)宿敵。從for和while出生到現(xiàn)在,它們倆對(duì)上它們的宿敵都從來(lái)沒有贏過(guò)?!?p>  老爹悠悠地感嘆了一聲。

  聽老爹這么一說(shuō),我感覺這不是說(shuō)的我的小弦子么?我也是從來(lái)都沒有贏過(guò)小弦子一次,經(jīng)常會(huì)生出一種「既生瑜,何生亮?」的感嘆。如此,我倒是要看看for和while的宿敵有什么能耐。

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

  「先說(shuō)說(shuō)do while,剛剛說(shuō)的while給數(shù)組賦值的例子來(lái)說(shuō),如果一開始i 大于等于1000的話,此時(shí)while的輪回條件不成立,輪回內(nèi)容一次都不會(huì)執(zhí)行,對(duì)吧?」

  「嗯,的確是這樣?!?p>  我點(diǎn)了點(diǎn)頭。

  「這個(gè)do while恰好和這個(gè)相反,因?yàn)樗軌虮WC輪回的內(nèi)容至少執(zhí)行一次!其他的特性就和while一模一樣了。我們先看看它的格式:

  do

  {

  輪回內(nèi)容

  }

  while(輪回條件);

  它的執(zhí)行過(guò)程是先執(zhí)行do里面的輪回內(nèi)容,然后再判斷while中的輪回條件,成立就繼續(xù)輪回,否則退出輪回。所以輪回內(nèi)容一定會(huì)被執(zhí)行一次。」

  「嗦嘎!」

  「說(shuō)完了伙伴,接下來(lái)就要說(shuō)它們的宿敵了。它們的宿敵有兩個(gè),一個(gè)是continue,另一個(gè)你認(rèn)識(shí)——break?!?p>  「break它不是switch的小伙伴么?怎么哪兒都有它!」

  「哈哈,既然如此,我們就先說(shuō)break是怎么把for和while按在地上摩擦的。其實(shí)你只要記住一句話,break會(huì)結(jié)束離它最近的for或者while的輪回。

  比如:

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

  {

  if(i == 2)

  {

  break;

  }

  }

  原本這個(gè)for要輪回100次,但是在第三次的時(shí)候遇到了break,于是整個(gè)輪回就結(jié)束了。

  同樣的,while也是如此。之所以給你強(qiáng)調(diào)『最近』這兩個(gè)字,是因?yàn)樵诙嘀豧or、while嵌套,它們相互嵌套的時(shí)候,很多初學(xué)者不知道break停掉的是誰(shuí)的輪回?!?p>  

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進(jìn)入下一章  按 “空格鍵” 向下滾動(dòng)
目錄
目錄
設(shè)置
設(shè)置
書架
加入書架
書頁(yè)
返回書頁(yè)
指南