Office中國(guó)論壇/Access中國(guó)論壇

標(biāo)題: 【新手入門】之四:循環(huán)語(yǔ)句Do和死循環(huán) [打印本頁(yè)]

作者: roych    時(shí)間: 2012-3-4 17:18
標(biāo)題: 【新手入門】之四:循環(huán)語(yǔ)句Do和死循環(huán)
        上一節(jié)詳細(xì)地講完了For語(yǔ)句,現(xiàn)在開(kāi)始講Do語(yǔ)句。Do的常用格式有以下幾種:
執(zhí)行情況
條件不成立
      先判斷再執(zhí)行(可能不執(zhí)行)Do [Until 條件不成立 或者 While 條件成立]
      執(zhí)行語(yǔ)句
      [Exit Do]
Loop
      先執(zhí)行在判斷(至少執(zhí)行一次)Do      
     執(zhí)行語(yǔ)句
      [Exit Do]
Loop [Until 條件不成立 或者 While 條件成立]
       除此以外,還有一個(gè)大家可能不太熟悉的While語(yǔ)句。
       While 條件成立
               執(zhí)行語(yǔ)句
       Wend
       再把上一節(jié)的題目“在深圳把Roy找出來(lái)”拿出來(lái),用Do來(lái)解決:

  1. Do While 男生.Name<>"Roych"
  2.      繼續(xù)找
  3. Loop
復(fù)制代碼
從這一點(diǎn)可以看得出,和For相比,Do是不需要找到深圳有多少人口的,也不需要知道要查多少次,只知道在各個(gè)進(jìn)出關(guān)口檢查姓名就可以了(這聽(tīng)起來(lái)好像通緝令耶{:soso_e127:})。簡(jiǎn)單點(diǎn)說(shuō),Do只需要知道執(zhí)行的條件,而無(wú)需得知執(zhí)行次數(shù)或者元素個(gè)數(shù)等。因此在某些時(shí)候,Do比For更方便。例如:
  1. Sub test()
  2. Do Until  Val(x) >= 2
  3. x = InputBox("請(qǐng)輸入大于或等于2的正整數(shù)", "輸入提示", 2)
  4. Loop
  5. End Sub
復(fù)制代碼
這一段代碼并不完善(例如輸入數(shù)字字母混合的字符串后也是可以的),在這里只是作為一個(gè)舉例來(lái)給大家一個(gè)思路而已。從這一點(diǎn)來(lái)看,Do顯得比For更霸道一些,只要條件不符合就一路彈窗。
       因此,寫Do語(yǔ)句時(shí),大家必須小心使用判斷條件,否則容易陷入死循環(huán)或發(fā)生溢出錯(cuò)誤。如果對(duì)于死循環(huán)無(wú)法理解,可以參考下面這段代碼:

  1. Sub test()
  2. '想終止程序時(shí)請(qǐng)按下Ctrl+Pause組合鍵
  3. Do Until k >= 2
  4.       MsgBox K
  5. Loop
  6. End Sub
復(fù)制代碼
這是因?yàn)閗的初始值為0,永遠(yuǎn)都無(wú)法滿足條件k>=2,因此只能“彈”死你。事實(shí)上,任何循環(huán)語(yǔ)句都可能導(dǎo)致這樣的死循環(huán),只是Do具有更高的隱秘性,以至于不被重視罷了。以下是一個(gè)VB的一個(gè)經(jīng)典例子(判斷質(zhì)數(shù)或者合數(shù)):
  1. Sub test()
  2. Dim m As Integer, i As Integer
  3. m = InputBox("請(qǐng)輸入一個(gè)數(shù):", "輸入提示")
  4. i = 2
  5. Do Until (m Mod i = 0) Or i = m - 1
  6.     i = i + 1
  7. Loop
  8. If m Mod i = 0 Then
  9.     Debug.Print m; "是合數(shù)"
  10. Else
  11.     Debug.Print m; "是質(zhì)數(shù)"
  12. End If
  13. End Sub
復(fù)制代碼
事實(shí)上大于2以上的數(shù)值,可以用平方根來(lái)代替里面的i=m-1以便減少運(yùn)行次數(shù)。此外大家也可以用For語(yǔ)句來(lái)寫寫看,應(yīng)該不算太難。
      至此,語(yǔ)句部分算是講完了(如有不懂的請(qǐng)發(fā)帖提問(wèn))。后面將重點(diǎn)講講一些常用算法。
【新手入門】之一:If分支語(yǔ)句
【新手入門】之二:分支語(yǔ)句總結(jié)
【新手入門】之三:循環(huán)語(yǔ)句For
【新手入門】之四:循環(huán)語(yǔ)句Do和死循環(huán)
【新手入門】之五:公共變量與傳址過(guò)程、傳值過(guò)程
【新手入門】之六:“悲歡離合總無(wú)情”——淺談Split和Join
【新手入門】之七:嵌套與并列——再談If流程問(wèn)題
【新手入門】之八:“連就連”——淺談“&”和“+”連接符的區(qū)別

【新手入門】之九:從百錢百雞談起——淺談“規(guī)劃求解”兼答lingjiang問(wèn)
【新手入門】之十:書到用時(shí)方恨少——自定義菜單(Access 2003)的制作
【新手入門】之十一:淺談ADO之序言
【新手入門】之十二:淺談ADO之Connection
【新手入門】之十三:淺談ADO之Conmmand(上)
【新手入門】之十四:淺談ADO之Command(下)
【新手入門】之十五:淺談ADO之Recordset(上)
【新手入門】之十六:淺談ADO之Recordset(下)
【新手入門】之十七:淺談列表框的使用
【新手入門】之十八:雙擊列表框修改數(shù)據(jù)
【新手入門】之十九:從“書與女友恕不外借”談起——淺談“Bookmark”的使用
【新手入門】之二十:“書與書簽”——bookmark屬性答疑
【新手入門】之二十一:記錄集的“凌遲”——逐條導(dǎo)出記錄集

【新手進(jìn)階】之一:基礎(chǔ)算法(一)
【新手進(jìn)階】之二:基礎(chǔ)算法(二)
【新手進(jìn)階】之三:基礎(chǔ)算法(三)
【新手進(jìn)階】之四:基礎(chǔ)算法(四)
【新手進(jìn)階】之五:排序搜索(一)
【新手進(jìn)階】之六:排序搜索(二)
【新手進(jìn)階】之七:遞歸算法
【新手進(jìn)階】之八:冒泡排序
【新手進(jìn)階】之九:淺談不綁定數(shù)據(jù)源操作記錄
【新手進(jìn)階】之十:工作日的計(jì)算
【新手進(jìn)階】之十一:“庖丁解!焙汀凹o(jì)昌學(xué)射”——淺談表格式文本數(shù)據(jù)的導(dǎo)入
【新手進(jìn)階】之十二:從四腳騰空的奔馬談起——原來(lái)界面可以這樣設(shè)計(jì)
【新手進(jìn)階】之十三:Outlook風(fēng)格導(dǎo)航界面
【新手進(jìn)階】之十四:倉(cāng)庫(kù)管理系統(tǒng)

作者: ysh5858    時(shí)間: 2012-3-4 18:09
頂一個(gè)!
作者: ysh5858    時(shí)間: 2012-3-4 18:20
版主,如何判斷子窗體數(shù)據(jù)為空?例我在窗體上設(shè)置一個(gè)控件,對(duì)子窗體進(jìn)行控制,當(dāng)子窗體數(shù)據(jù)為空時(shí),操作不提示出錯(cuò)?
(我現(xiàn)在遇到的問(wèn)題是,當(dāng)子窗體有數(shù)據(jù)時(shí),點(diǎn)擊控件操作時(shí)可以運(yùn)行,如果子窗體無(wú)數(shù)據(jù)時(shí)提示出錯(cuò))請(qǐng)教,謝謝!
作者: roych    時(shí)間: 2012-3-5 00:03
ysh5858 發(fā)表于 2012-3-4 18:20
版主,如何判斷子窗體數(shù)據(jù)為空?例我在窗體上設(shè)置一個(gè)控件,對(duì)子窗體進(jìn)行控制,當(dāng)子窗體數(shù)據(jù)為空時(shí),操作不 ...

此問(wèn)題和本帖無(wú)關(guān)。
如果子窗體綁定數(shù)據(jù)表時(shí),可以通過(guò)RecordCount來(lái)判斷(記得先MoveLast再M(fèi)oveFirst,否則RecordCount計(jì)算不準(zhǔn)確):
Me.子窗體.Form.Recordset.RecordCount
作者: yanwei82123300    時(shí)間: 2012-3-5 08:28
謝謝分享
作者: xie62    時(shí)間: 2012-3-5 08:35
謝謝分享
作者: efcndi    時(shí)間: 2012-3-5 08:56
看看,學(xué)學(xué)
作者: 風(fēng)中漫步    時(shí)間: 2012-3-5 12:34
我要好好學(xué)學(xué),老記不住.謝謝講解
作者: tmtony    時(shí)間: 2012-3-5 13:27
謝謝分享
作者: ycxchen    時(shí)間: 2012-3-5 14:55
學(xué)習(xí)!
作者: 陽(yáng)城    時(shí)間: 2012-3-5 16:36
堅(jiān)持學(xué)習(xí)!!
作者: renyucai1963    時(shí)間: 2012-3-5 17:24
學(xué)習(xí)
作者: ycxchen    時(shí)間: 2012-3-6 09:27
版主,能否結(jié)合ACCESS例子講解循環(huán)語(yǔ)句Do和死循環(huán)等語(yǔ)句的運(yùn)用?
作者: roych    時(shí)間: 2012-3-6 16:47
ycxchen 發(fā)表于 2012-3-6 09:27
版主,能否結(jié)合ACCESS例子講解循環(huán)語(yǔ)句Do和死循環(huán)等語(yǔ)句的運(yùn)用?

死循環(huán)是禁用的,因?yàn)檫@跟病毒類似。
講到算法時(shí)將會(huì)對(duì)這些語(yǔ)句進(jìn)行進(jìn)一步的使用。
作者: weizhuzhu    時(shí)間: 2012-3-6 18:47
學(xué)習(xí)的
作者: zhylee    時(shí)間: 2012-3-7 13:33
抓緊 學(xué)習(xí)呀
作者: yori2007    時(shí)間: 2012-4-1 22:52

作者: jinzhanxi    時(shí)間: 2012-7-30 09:09
謝謝分享
作者: smilingkiss    時(shí)間: 2013-1-31 22:49
學(xué)習(xí)中

作者: smilingkiss    時(shí)間: 2013-1-31 23:02
版主:
Sub test()
Dim m As Integer, i As Integer
m = InputBox("請(qǐng)輸入一個(gè)數(shù):", "輸入提示")
i = 2
Do Until (m Mod i = 0) Or i = m - 1
    i = i + 1
Loop
If m Mod i = 0 Then
    Debug.Print m; "是素?cái)?shù)"
Else
    Debug.Print m; "是合數(shù)"
End If
End Sub

這里的素?cái)?shù)和合數(shù)是不是反過(guò)來(lái)了?例如輸入6,6 mod 2 = 0吧?6是素?cái)?shù)哦,不知我是不是哪里理解錯(cuò)了
作者: roych    時(shí)間: 2013-2-1 00:33
smilingkiss 發(fā)表于 2013-1-31 23:02
版主:
Sub test()
Dim m As Integer, i As Integer

筆誤,不好意思~~已檢查并更正過(guò)來(lái)了。謝謝提醒~~
作者: wang1950317    時(shí)間: 2013-2-1 13:09
好好學(xué)習(xí)!謝謝!
作者: sukunli    時(shí)間: 2013-3-7 22:35
頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂
作者: 微微森林    時(shí)間: 2013-3-28 20:28
聽(tīng)得似懂非懂,慢慢來(lái)了。
作者: XWQ2000    時(shí)間: 2013-7-26 22:41
頂一個(gè)!
作者: 34acc    時(shí)間: 2013-8-6 15:35
謝謝分享
作者: msyangyi    時(shí)間: 2014-5-26 13:10
好好學(xué)習(xí)!
作者: sanjian    時(shí)間: 2014-11-12 12:36
感謝樓主
作者: gxstudent    時(shí)間: 2014-12-22 22:08
學(xué)習(xí)
作者: 天涯淪落20131    時(shí)間: 2014-12-23 10:10
漸進(jìn)學(xué)習(xí)!
作者: 桑松木    時(shí)間: 2015-1-10 19:30
謝謝版主
作者: xyangjie    時(shí)間: 2015-4-15 17:42

作者: yanhantan    時(shí)間: 2015-4-28 01:02
學(xué)習(xí)學(xué)習(xí)
作者: songgpljh    時(shí)間: 2015-10-10 15:57
這個(gè)有點(diǎn)看的不是很懂,自己再看兩遍

作者: WFH6898    時(shí)間: 2015-11-11 18:10
好東西,一步步來(lái)吧
作者: 0520john    時(shí)間: 2016-1-4 16:27
學(xué)習(xí)
作者: cshiq    時(shí)間: 2016-1-17 05:44
循環(huán)語(yǔ)句Do和死循環(huán)
作者: chemi_lai    時(shí)間: 2016-3-30 22:19
高人喲,學(xué)習(xí)
作者: 叫你不聽(tīng)話~~    時(shí)間: 2016-3-31 14:12
學(xué)習(xí)
作者: 神經(jīng)挺住    時(shí)間: 2016-4-15 14:34
學(xué)習(xí)
作者: Superleistung    時(shí)間: 2016-4-19 15:43
多多學(xué)學(xué)基礎(chǔ)知識(shí)
作者: 522650696    時(shí)間: 2016-4-27 10:36
d=====( ̄▽ ̄*)b
作者: 鄱湖人2012    時(shí)間: 2016-5-6 20:03
學(xué)習(xí)
作者: 鄱湖人2012    時(shí)間: 2016-5-6 20:03
學(xué)習(xí)
作者: 山之冬    時(shí)間: 2016-7-1 12:14
學(xué)習(xí)
作者: 逍遙騎士wei    時(shí)間: 2016-7-26 17:05
6666666666666666666666
作者: uncletse    時(shí)間: 2016-7-31 10:05
感謝分享..辛苦了
作者: huangmin_best    時(shí)間: 2016-8-4 15:41
好難理解,謝謝分享
作者: baiqiansheng    時(shí)間: 2016-8-12 16:26
支持。。。。。。。。。!
作者: wind7412    時(shí)間: 2016-9-7 10:31
學(xué)習(xí)一下
作者: p51219    時(shí)間: 2016-9-21 23:07
11111
作者: p51218    時(shí)間: 2016-11-14 23:34
h                           
作者: 寒月TEA    時(shí)間: 2017-1-23 11:24
看看看看·~
作者: wenbin_zheng    時(shí)間: 2017-2-10 16:47

看看
作者: 72310    時(shí)間: 2017-2-23 13:57
新手回復(fù)
作者: guan818355    時(shí)間: 2017-3-12 21:20
856465
作者: 農(nóng)民工    時(shí)間: 2017-4-24 08:29
學(xué)習(xí)
作者: hongyepiaofei    時(shí)間: 2017-5-19 16:21
學(xué)習(xí)一下
作者: 雙木無(wú)神    時(shí)間: 2017-6-26 09:47
新手多多關(guān)照
作者: ej1213    時(shí)間: 2018-6-8 16:33
謝謝分享
作者: 六月雪    時(shí)間: 2019-3-4 10:13
哦哦哦噢噢噢噢噢噢噢噢哦哦哦
作者: luang4089    時(shí)間: 2019-9-11 21:09
學(xué)習(xí)學(xué)習(xí)
作者: 1271650489    時(shí)間: 2020-4-17 09:19
學(xué)習(xí)一下
作者: gaom8    時(shí)間: 2020-8-20 11:37
慢慢學(xué)習(xí)。。。。
作者: 付謙    時(shí)間: 2021-5-31 08:16
學(xué)習(xí)
作者: wuwu200222    時(shí)間: 2023-11-21 09:38
學(xué)習(xí)




歡迎光臨 Office中國(guó)論壇/Access中國(guó)論壇 (http://mzhfr.cn/) Powered by Discuz! X3.3