程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> VC#2005快速入門之使用do語句

VC#2005快速入門之使用do語句

編輯:關於C#

while和for語句都在循環開始的時候測試它們的布爾表達式。這意味著假如在首次測試時,布爾表達式就求值為false,那麼循環主體一次都不會運行。do語句則不同,它的布爾表達式是在每次重復之後求值的,所以主體至少會執行一次。

do語句的語法如下(不要忘記最後的分號):

do
statement
while (booleanExpression);

如果循環主體由多個語句構成,請使用一個語句塊。下面是在控制台上輸出0~9的那個例子的do語句版本:

int i = 0;
do
{
 Console.WriteLine(i);
 i++;
}
while (i != 10);

break和continue語句
  在前文我們曾用break語句來跳出switch語句。除此之外,還可以使用break語句來跳出一個循環。執行break之後,系統會立即終止循環,並從循環之後的第一個語句繼續執行。在這種情況下,循環的“更新”和“繼續”條件都不會重新判斷。
  與此相反,continue語句會造成當前循環結束,並立即開始下一次循環(在對布爾表達式進行重新求值之後)。下面是在控制台上輸出0~9的那個例子的另一個版本,這一次將使用break和continue語句:
int i = 0;
while (true)
{
 Console.WriteLine("continue " + i);
 i++;
 if (i != 10)
  continue;
 else
  break;
}
  這段代碼看起來讓人非常難受。許多編程指南都建議小心使用continue,或者根本不要使用它,否則很容易造成難以理解的代碼。continue的行為也令人捉摸不定。例如,假如在一個for語句中執行continue,那麼會在運行了for語句的“更新”部分之後,才開始下一次循環。

在下面的例子中,我們將寫一個do語句來將一個數字轉換成字符串形式。

·使用do語句

1. 在Visual Studio 2005中打開DoStatement項目,它位於My Documents文件夾下的\Microsoft Press\Visual CSharp Step by Step\Chapter 5\DoStatement子文件夾中。

選擇“調試”|“開始執行(不調試)”。

Visual Studio 2005將開始生成並運行Windows應用程序。

應用程序將顯示一個窗體,其中包含兩個文本框和一個Show Steps(顯示步驟)按鈕。在上方的文本框中輸入一個正數(我們使用的算法還不支持負數),然後單擊Show Steps按鈕,下方的文本框就會顯示創建這個數字的字符串形式所需的步驟。

注意 這個簡單的例子展示了如何使用do循環將數字轉換成字符串。但要注意一點,.NET Framework提供了Convert.ToString方法來做同樣的事情。在自己的應用程序中執行類似任務時,應該使用該方法。

2. 作為一個例子,請在上方的文本框中輸入2693,然後單擊Show Steps按鈕。

在下方的文本框中,將顯示創建2693的字符串形式所經歷的步驟,如圖2所示。

圖2 單擊Show Steps按鈕之後將顯示具體步驟

3. 關閉窗口,返回Visual Studio 2005編程環境。

4. 在“代碼和文本編輯器”窗口中顯示Form1.cs的代碼。

找到showSteps_Click方法。該方法會在用戶單擊了Show Steps按鈕之後開始運行。

5. 該方法包含以下語句:

int amount = System.Int32.Parse(number.Text);
steps.Text = "";
string current = "";
do
{
int digitCode = '0' + amount % 10;
char digit = Convert.ToChar(digitCode);
current = digit + current;
steps.Text += current + "\r\n";
amount /= 10;
}
while (amount != 0);

注意 \r代表一個回車符。在多行文本框控件中輸出文本時,需要同時輸出一個回車符和一個換行符,才能跳到下一行,並使光標定位到行首。否則,以後輸出的文本將出現在同一行上。

第一個語句使用System.Int32類的Parse方法,將number文本框的Text屬性中存儲的字符串值轉換成int值:

int amount = System.Int32.Parse(number.Text);

第二個語句清除下方的文本框(稱為steps)中顯示的文本,這一次的做法是將Text屬性設為一個空字符串:

steps.Text = "";

第三個語句聲明一個名為current的字符串變量,並把它初始化為空字符串:

string current = “";

這個方法真正的工作是由do語句來執行的,它從第4個語句開始:

do
{
 ...
}
while (amount != 0);

我們將利用整數算術操作符和取模操作符,使用10來反復除amount變量,每次獲得的余數都是正在構造的字符串的下一個數位。最終,amount將縮減為0值,循環將結束。注意,循環主體至少會執行一次。假如用戶輸入的就是數字0,這個“至少執行一次”的行為就正是我們所需要的。

do循環中的第1個語句是:

int digitCode = '0' + amount % 10;

該語句聲明一個名為digitCode的int變量,並把它初始化為以下表達式的結果:

'0' + amount % 10

這個表達式需要稍微解釋一下!'0'的值是指字符0的值。在Windows使用的字符集中,該字符等於整數值48(每個字符都有它自己的惟一的字符代碼,這是一個整數值)。類似地,'1'的字符代碼是49,'2'的字符代碼是50,以此類推。

amount % 10的值是用10來除amount之後得到的余數。例如,假如amount包含的值是2693,那麼2693 % 10的結果是3(2693除以10的結果是商269余3)。因此,假如amount等於2693,那麼表達式'0' + amount % 10就等同於'0' + 3,結果是51。這是字符'3'的字符代碼。要注意的是,+操作符在這裡執行了一次隱式強制類型轉換,它將'0'轉換成整數值48,使整個表達式能夠求值。

do循環中的第2個語句是:

char digit = Convert.ToChar(digitCode);

該語句聲明了一個名為digit的char變量,並把它初始化成Convert.ToChar(digitCode)這個方法調用的結果。調用該方法,將返回與參數指定的字符代碼對應的一個字符。換言之,Convert.ToChar('0' + 3)的求值結果就是'3'。

do循環中的第3個語句是:

current = digit + current;

該語句將剛才計算出來的字符變量digit附加到字符串current之前。注意,該語句不能替換為current += digit,否則就會將digit附加到current之後。

do循環中的第4個語句是:

steps.Text += current + "\r\n";

該語句的作用是在Steps文本框的Text屬性中附加另一個要顯示的步驟。

do循環中的最後一個語句是:

amount /= 10;

該語句等同於amount = amount / 10;。如果amount的值是2693,那麼在運行上述語句之後,amount的值將變成269。注意,每一次重復do語句,都會從amount中移除最後一個數位,並將那個數位附加到current字符串之前。

在最後一個練習中,將使用Visual Studio 2005調試器來逐步執行上述do語句,以幫助你理解它的工作過程。

·逐步執行do語句

1. 在“代碼和文本編輯器”窗口中找到showSteps_Click方法。

2. 將鼠標移至showSteps_Click方法的第一個語句。

第一個語句是:

int amount = System.Int32.Parse(number.Text);

3. 右擊第一個語句的任何地方,從彈出菜單中選擇“運行到光標處”。

Visual Studio 2005將生成並運行應用程序。

4. 窗體出現後,在上方的文本框中輸入2693,然後單擊Show Steps按鈕。

程序將暫停運行,Visual Studio 2005將進入調試模式。“代碼和文本編輯器”窗口左側將出現一個黃箭頭,標記出當前語句。

5. 如果“調試”工具欄不可見,請顯示它(選擇“視圖”|“工具欄”|“調試”)。在“調試”工具欄上,請單擊“斷點”按鈕旁邊的下拉列表箭頭。

隨後會打開如圖3所示菜單。

圖3 單擊“斷點”按鈕旁邊的下拉列表箭頭

6. 從這個菜單中選擇“局部變量”。

隨後會打開“局部變量”窗口,其中顯示了當前方法中的局部變量的名稱、值和類型,其中的amount是局部變量。注意,amount的值目前是0,如圖5.4所示。

7. 單擊“調試”工具欄上的“逐語句”按鈕。

調試器將運行當前語句:

int amount = System.Int32.Parse(number.Text);

在“局部變量”窗口中,amount的值將變成2693,黃箭頭會指向下一個語句。

8. 繼續單擊“逐語句”按鈕。

調試器將運行以下語句:

steps.Text = "";

該語句不影響“局部變量”窗口的顯示,因為steps是窗體的一個字段,而不是一個局部變量。黃箭頭繼續指向下一個語句。

圖4 “局部變量”窗口

9. 繼續單擊“逐語句”按鈕。

調試器將運行以下語句:

string current = "";

黃箭頭將指向do循環的起始大括號。

10. 繼續單擊“逐語句”按鈕。

黃箭頭將指向do循環中的第一個語句。do循環包含它自己的兩個局部變量,即digitCode和digit。注意,這些局部變量已經在“局部變量”窗口中顯示,而且digitCode的值為0。

11. 繼續單擊“逐語句”按鈕。

調試器將運行以下語句:

int digitCode = '0' + amount % 10;

在“局部變量”窗口中,digitCode的值將變成51。這是由於表達式amount % 10的結果為3(amount的值為2693),而'3'的字符代碼是51(48 + 3)。

12. 繼續單擊“逐語句”按鈕。

調試器將運行以下語句:

char digit = Convert.ToChar(digitCode);

在“局部變量”窗口中,digit的值將變成'3' 。注意在“局部變量”窗口中,char值是同時使用字符代碼值(本例是51)和對應的字符形式(本例是'3')來顯示的。黃箭頭將指向do循環的下一個語句。

注意,在“局部變量”窗口中,current變量的值是""(即為空)。

13. 繼續單擊“逐語句”按鈕。

調試器將運行以下語句:

current = current + digit;

在“局部變量”窗口中,current變量的值將變成"3"。

14. 繼續單擊“逐語句”按鈕。

調試器將運行以下語句:

steps.Text += current + "\r\n";

該語句將在steps文本框中顯示文本"3",並後跟一個回車符和一個換行符,確保以後的輸出將從文本框的下一行開始。

在“局部變量”窗口中,amount的值仍然為2693。

15. 繼續單擊“逐語句”按鈕。

調試器將運行以下語句:

amount /= 10;

在“局部變量”窗口中,amount的值將變成269。黃箭頭指向do循環的結束大括號。

16. 繼續單擊“逐語句”按鈕。

黃箭頭將指向while語句。

17. 繼續單擊“逐語句”按鈕。

調試器將運行以下語句:

while (amount != 0);

amount的值是269,表達式269 != 0將求值為true,所以將進行下一次循環。黃箭頭將跳回do循環的起始大括號。

18. 繼續單擊“逐語句”按鈕。

黃箭頭將指向do循環中的第一個語句。

19. 再單擊“逐語句”按鈕22次,觀察“局部變量”窗口中的局部變量的值發生的變化。在“局部變量”窗口中,amount的值最終將變成0,而current的值變成"2693"。

黃箭頭將指向do循環的循環繼續條件:

while (amount != 0);

amount的值目前為0,所以表達式amount != 0求值為false,do循環應該終止。

20. 繼續單擊“逐語句”按鈕。

調試器將運行以下語句:

while (amount != 0);

如同我們預期的那樣,dot循環終止,黃箭頭移至showSteps_Click方法的結束大括號。

21. 單擊“調試”工具欄上的“繼續”按鈕。

窗體將出現,並顯示為了創建2693的字符串形式所經歷的4個步驟:"3","93","693"和"2693"。

22. 關閉窗體,返回Visual Studio 2005編程環境。

恭喜!你已經成功編寫了有意義的while和do語句,並利用Visual Studio 2005調試器對它們進行了調試。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved