while和for語句都在循環開始的時候測試它們的布爾表達式這意味著假如在首次測試時布爾表達式就求值為false那麼循環主體一次都不會運行do語句則不同它的布爾表達式是在每次重復之後求值的所以主體至少會執行一次
do語句的語法如下(不要忘記最後的分號)
do
statement
while (booleanExpression);
如果循環主體由多個語句構成請使用一個語句塊下面是在控制台上輸出~的那個例子的do語句版本
int i = ;
do
{
ConsoleWriteLine(i);
i++;
}
while (i != );
break和continue語句
在前文我們曾用break語句來跳出switch語句除此之外還可以使用break語句來跳出一個循環執行break之後系統會立即終止循環並從循環之後的第一個語句繼續執行在這種情況下循環的更新和繼續條件都不會重新判斷
與此相反continue語句會造成當前循環結束並立即開始下一次循環(在對布爾表達式進行重新求值之後)下面是在控制台上輸出~的那個例子的另一個版本這一次將使用break和continue語句
int i = ;
while (true)
{
ConsoleWriteLine(continue + i);
i++;
if (i != )
continue;
else
break;
}
這段代碼看起來讓人非常難受許多編程指南都建議小心使用continue或者根本不要使用它否則很容易造成難以理解的代碼continue的行為也令人捉摸不定例如假如在一個for語句中執行continue那麼會在運行了for語句的更新部分之後才開始下一次循環
在下面的例子中我們將寫一個do語句來將一個數字轉換成字符串形式
·使用do語句
在Visual Studio 中打開DoStatement項目它位於My Documents文件夾下的\Microsoft Press\Visual CSharp Step by Step\Chapter \DoStatement子文件夾中
選擇調試|開始執行(不調試)
Visual Studio 將開始生成並運行Windows應用程序
應用程序將顯示一個窗體其中包含兩個文本框和一個Show Steps(顯示步驟)按鈕在上方的文本框中輸入一個正數(我們使用的算法還不支持負數)然後單擊Show Steps按鈕下方的文本框就會顯示創建這個數字的字符串形式所需的步驟
注意 這個簡單的例子展示了如何使用do循環將數字轉換成字符串但要注意一點 Framework提供了ConvertToString方法來做同樣的事情在自己的應用程序中執行類似任務時應該使用該方法
作為一個例子請在上方的文本框中輸入然後單擊Show Steps按鈕
在下方的文本框中將顯示創建的字符串形式所經歷的步驟如圖所示
圖 單擊Show Steps按鈕之後將顯示具體步驟
關閉窗口返回Visual Studio 編程環境
在代碼和文本編輯器窗口中顯示Formcs的代碼
找到showSteps_Click方法該方法會在用戶單擊了Show Steps按鈕之後開始運行
該方法包含以下語句
int amount = SystemIntParse(numberText);
stepsText = ;
string current = ;
do
{
int digitCode = + amount % ;
char digit = ConvertToChar(digitCode);
current = digit + current;
stepsText += current + \r\n;
amount /= ;
}
while (amount != );
注意 \r代表一個回車符在多行文本框控件中輸出文本時需要同時輸出一個回車符和一個換行符才能跳到下一行並使光標定位到行首否則以後輸出的文本將出現在同一行上
第一個語句使用SystemInt類的Parse方法將number文本框的Text屬性中存儲的字符串值轉換成int值
int amount = SystemIntParse(numberText);
第二個語句清除下方的文本框(稱為steps)中顯示的文本這一次的做法是將Text屬性設為一個空字符串
stepsText = ;
第三個語句聲明一個名為current的字符串變量並把它初始化為空字符串
string current = ;
這個方法真正的工作是由do語句來執行的它從第個語句開始
do
{
}
while (amount != );
我們將利用整數算術操作符和取模操作符使用來反復除amount變量每次獲得的余數都是正在構造的字符串的下一個數位最終amount將縮減為值循環將結束注意循環主體至少會執行一次假如用戶輸入的就是數字這個至少執行一次的行為就正是我們所需要的
do循環中的第個語句是
int digitCode = + amount % ;
該語句聲明一個名為digitCode的int變量並把它初始化為以下表達式的結果
+ amount %
這個表達式需要稍微解釋一下!的值是指字符的值在Windows使用的字符集中該字符等於整數值(每個字符都有它自己的惟一的字符代碼這是一個整數值)類似地的字符代碼是的字符代碼是以此類推
amount % 的值是用來除amount之後得到的余數例如假如amount包含的值是那麼 % 的結果是(除以的結果是商余)因此假如amount等於那麼表達式 + amount % 就等同於 + 結果是這是字符的字符代碼要注意的是+操作符在這裡執行了一次隱式強制類型轉換它將轉換成整數值使整個表達式能夠求值
do循環中的第個語句是
char digit = ConvertToChar(digitCode);
該語句聲明了一個名為digit的char變量並把它初始化成ConvertToChar(digitCode)這個方法調用的結果調用該方法將返回與參數指定的字符代碼對應的一個字符換言之ConvertToChar( + )的求值結果就是
do循環中的第個語句是
current = digit + current;
該語句將剛才計算出來的字符變量digit附加到字符串current之前注意該語句不能替換為current += digit否則就會將digit附加到current之後
do循環中的第個語句是
stepsText += current + \r\n;
該語句的作用是在Steps文本框的Text屬性中附加另一個要顯示的步驟
do循環中的最後一個語句是
amount /= ;
該語句等同於amount = amount / ;如果amount的值是那麼在運行上述語句之後amount的值將變成注意每一次重復do語句都會從amount中移除最後一個數位並將那個數位附加到current字符串之前
在最後一個練習中將使用Visual Studio 調試器來逐步執行上述do語句以幫助你理解它的工作過程
·逐步執行do語句
在代碼和文本編輯器窗口中找到showSteps_Click方法
將鼠標移至showSteps_Click方法的第一個語句
第一個語句是
int amount = SystemIntParse(numberText);
右擊第一個語句的任何地方從彈出菜單中選擇運行到光標處
Visual Studio 將生成並運行應用程序
窗體出現後在上方的文本框中輸入然後單擊Show Steps按鈕
程序將暫停運行Visual Studio 將進入調試模式代碼和文本編輯器窗口左側將出現一個黃箭頭標記出當前語句
如果調試工具欄不可見請顯示它(選擇視圖|工具欄|調試)在調試工具欄上請單擊斷點按鈕旁邊的下拉列表箭頭
隨後會打開如圖所示菜單
圖 單擊斷點按鈕旁邊的下拉列表箭頭
從這個菜單中選擇局部變量
隨後會打開局部變量窗口其中顯示了當前方法中的局部變量的名稱值和類型其中的amount是局部變量注意amount的值目前是如圖所示
單擊調試工具欄上的逐語句按鈕
調試器將運行當前語句
int amount = SystemIntParse(numberText);
在局部變量窗口中amount的值將變成黃箭頭會指向下一個語句
繼續單擊逐語句按鈕
調試器將運行以下語句
stepsText = ;
該語句不影響局部變量窗口的顯示因為steps是窗體的一個字段而不是一個局部變量黃箭頭繼續指向下一個語句
圖 局部變量窗口
繼續單擊逐語句按鈕
調試器將運行以下語句
string current = ;
黃箭頭將指向do循環的起始大括號
繼續單擊逐語句按鈕
黃箭頭將指向do循環中的第一個語句do循環包含它自己的兩個局部變量即digitCode和digit注意這些局部變量已經在局部變量窗口中顯示而且digitCode的值為
繼續單擊逐語句按鈕
調試器將運行以下語句
int digitCode = + amount % ;
在局部變量窗口中digitCode的值將變成這是由於表達式amount % 的結果為(amount的值為)而的字符代碼是( + )
繼續單擊逐語句按鈕
調試器將運行以下語句
char digit = ConvertToChar(digitCode);
在局部變量窗口中digit的值將變成 注意在局部變量窗口中char值是同時使用字符代碼值(本例是)和對應的字符形式(本例是)來顯示的黃箭頭將指向do循環的下一個語句
注意在局部變量窗口中current變量的值是(即為空)
繼續單擊逐語句按鈕
調試器將運行以下語句
current = current + digit;
在局部變量窗口中current變量的值將變成
繼續單擊逐語句按鈕
調試器將運行以下語句
stepsText += current + \r\n;
該語句將在steps文本框中顯示文本並後跟一個回車符和一個換行符確保以後的輸出將從文本框的下一行開始
在局部變量窗口中amount的值仍然為
繼續單擊逐語句按鈕
調試器將運行以下語句
amount /= ;
在局部變量窗口中amount的值將變成黃箭頭指向do循環的結束大括號
繼續單擊逐語句按鈕
黃箭頭將指向while語句
繼續單擊逐語句按鈕
調試器將運行以下語句
while (amount != );
amount的值是表達式 != 將求值為true所以將進行下一次循環黃箭頭將跳回do循環的起始大括號
繼續單擊逐語句按鈕
黃箭頭將指向do循環中的第一個語句
再單擊逐語句按鈕次觀察局部變量窗口中的局部變量的值發生的變化在局部變量窗口中amount的值最終將變成而current的值變成
黃箭頭將指向do循環的循環繼續條件
while (amount != );
amount的值目前為所以表達式amount != 求值為falsedo循環應該終止
繼續單擊逐語句按鈕
調試器將運行以下語句
while (amount != );
如同我們預期的那樣dot循環終止黃箭頭移至showSteps_Click方法的結束大括號
單擊調試工具欄上的繼續按鈕
窗體將出現並顯示為了創建的字符串形式所經歷的個步驟和
關閉窗體返回Visual Studio 編程環境
恭喜!你已經成功編寫了有意義的while和do語句並利用Visual Studio 調試器對它們進行了調試
From:http://tw.wingwit.com/Article/program/net/201311/11749.html