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

來源:互聯網
上載者:User
快速入門|語句   如果想根據一個布林運算式的結果選擇執行兩個不同的代碼塊,就可以使用if語句。

  理解if語句的文法

  if語句的文法格式如下(if和else是關鍵字):

if ( booleanExpression )
 statement-1;
else
 statement-2;
  如果 booleanExpression求值為true,就運行 statement - 1;否則就運行 statement - 2。else關鍵字和後續的 statement - 2是可有可無的。如果沒有else子句,那麼在 booleanExpression為false的前提下,什麼都不會發生。

  例如,以下if語句用於遞增一個秒錶的秒針(暫時忽略分鐘)。如果seconds的值是59,就重設為0;否則就使用操作符++來遞增:

int seconds;
...
if (seconds == 59)
seconds = 0;
else
seconds++;

  只使用布林運算式!

  if語句中的運算式必須放在一對圓括弧中。除此之外,運算式必須是布林運算式。在另一些語言中(尤其是C和C++),還可以使用一個整數運算式,編譯器能自動將整數值轉換成true(非零值)或false(零值)。C#不允許這樣做。如果寫這樣的一個運算式,編譯器會報錯。

  假如在if語句中不慎寫了一個賦值運算式,而不是執行一個相等性測試,C#編譯器也能識別你的錯誤。例如:

int seconds;
...
if (seconds = 59) // 編譯時間錯誤
...
if (seconds == 59) // 正確

  不慎而寫成賦值運算式,是C和C++程式容易出現bug的另一個原因。在C和C++中,會將所賦的值(59)悄悄地轉換成一個布爾值(任何非零的值都會被視為true),造成每次都必定執行if語句之後的代碼。

  最後,可以將一個布爾變數作為運算式使用,如下例所示:

bool inWord;
...
if (inWord == true) // 可以,但不常用
...
if (inWord) // 更好

   使用塊來分組語句

  有時,需要在一個布林運算式為true的前提下運行兩個或者更多的語句。可以將要啟動並執行語句分組到一個新方法中,然後調用那個方法。但是,一個更簡單的做法是將語句分組到一個塊(block)中。塊是指用一對大括弧來封閉的一系列語句。在下例中,兩個語句將seconds變數重設為零,並使minutes變數遞增。我們用一個塊來分組這兩個語句。假如seconds的值等於59,就執行該塊:

int seconds = 0;
int minutes = 0;
...

if (seconds == 59)
{
seconds = 0;
minutes++;
}
else
seconds++;


  重要提示 假如遺漏大括弧,將造成兩個嚴重後果。首先,C#編譯器只將第一個語句(seconds=0)與if語句關聯起來,下一個語句(minutes++)將不再成為if語句的一部分。其次,當編譯器遇到else關鍵字時,不會將它與前一個if語句關聯起來,所以會報告語法錯誤。

  嵌套if語句

  可以在一個if語句中嵌套其他if語句。這樣一來,就可以將一系列布林運算式連結起來,它們將依次測試,直到其中一個求值為true。在下例中,假如day值為0,則第一個測試求值為true,值"Sunday"將賦給dayName變數。假如day值不為0,則第一個測試失敗,控制將傳遞給else子句。該子句將運行第二個if語句,將day的值與1進行比較。注意,只有在第一個if測試為false的前提下,才會執行第二個if。類似地,只有在第一個和第二個if測試為false的前提下,才會執行第三個if。

if (day == 0)
dayName = "Sunday";
else if (day == 1)
dayName = "Monday";
else if (day == 2)
dayName = "Tuesday";
else if (day == 3)
dayName = "Wednesday";
else if (day == 4)
dayName = "Thursday";
else if (day == 5)
dayName = "Friday";
else if (day == 6)
dayName = "Saturday";
else
dayName = "unknown";
  在下面的練習中,我們將寫一個方法,以便使用嵌套的if語句來比較兩個日期。

  一、編寫if語句

  1. 啟動Microsoft Visual Studio 2005。

  2. 開啟Selection項目,它位於My Documents檔案夾下的\Microsoft Press\Visual CSharp Step by Step\Chapter 4\Selection子檔案夾中。

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

  Visual Studio 2005將產生並運行應用程式。表單上顯示了兩個DateTimePicker控制項,分別名為first和second(這種控制項將顯示一個日曆,便於使用者通過單擊下拉按鈕來選擇一個日期)。兩個控制項當前都設定成今天的日期。

  4. 單擊Compare按鈕。

  文字框中會顯示以下內容:

first == second : False
first != second : True
first < second : False
first <= second : False
first > second : True
first >= second : True
  上述結果明顯有問題!如圖1所示布林運算式first == second應該為true,因為first和second都被設定成今天的日期。事實上,在上述結果中,似乎只有操作符<和操作符>=的結果才是正確的!


圖1 文字框內的內容

  5. 單擊Quit。

  隨後將返回Visual Studio 2005編程環境。

  6. 在“代碼和文字編輯器”視窗中顯示Form1.cs的代碼,找到compare_Click方法,如下所示:

private int compare_Click(object sender, System.EventArgs e)
{
int diff = dateCompare(first.Value, second.Value);
info.Text = "";
show("first == second", diff == 0);
show("first != second", diff != 0);
show("first < second", diff < 0);
show("first <= second", diff <= 0);
show("first > second", diff > 0);
show("first >= second", diff >= 0);
}
  單擊表單上的Compare按鈕,就會執行這個方法。該方法擷取表單上的first和second這兩個DateTimePicker控制項中顯示的日期值,並調用另一個名為dateCompare的方法來比較它們。我們將在下一個步驟中具體討論dateCompare方法,這裡只是簡單地說一下。該方法的作用是比較它的兩個參數值,並根據比較結果來返回一個整數值。如果兩個值相同,就返回零;如果first的值小於second的值,就返回-1;如果first的值大於second的值,就返回+1(假如一個日期在日曆上排在另一個日期的後面,就說前者大於後者)。

  show方法用於在表單上的info文字框控制項中顯示比較結果。

  7. 找到dateCompare方法,如下所示:

private int dateCompare(DateTime leftHandSide, DateTime rightHandSide)
{
 // TO DO
 return 42;
}
  該方法目前在調用後始終返回同一個值,而不是通過比較參數值來返回0,-1或+1。這解釋了為什麼應用程式不像我們期望的那樣工作!現在,需要實現這個方法,讓它正確地比較兩個日期。

  8. 從dateCompare方法中移除// TO DO注釋和return語句。

  9. 在dateCompare方法主體中輸入以下語句:

int result;
if (leftHandSide.Year < rightHandSide.Year)
 result = -1;
else if (leftHandSide.Year > rightHandSide.Year)
 result = +1;
else if (leftHandSide.Month < rightHandSide.Month)
 result = -1;
else if (leftHandSide.Month > rightHandSide.Month)
 result = +1;
else if (leftHandSide.Day < rightHandSide.Day)
 result = -1;
else if (leftHandSide.Day > rightHandSide.Day)
 result = +1;
else
 result = 0;
 return result;
  假如leftHandSide.Year < rightHandSide.Year和leftHandSide.Year > rightHandSide.Year為false,那麼leftHandSide.Year == rightHandSide.Year肯定為true,程式流程將正確轉移,開始比較lhs和rhs的Month屬性。類似地,假如leftHandSide.Month < rightHandSide.Month和leftHandSide.Month > rightHandSide.Month為false,那麼leftHandSide.Month == rightHandSide.Month肯定為true,程式將開始比較lhs和rhs的Day屬性。最後,假如leftHandSide.Day < rightHandSide.Day和leftHandSide.Day > rightHandSide.Day為false,那麼leftHandSide.Day == rightHandSide.Day肯定為true;另外,由於在這時候,Month和Year屬性也肯定為true,所以兩個日期肯定是相同的。

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

  應用程式將重建並重新啟動。同樣地,兩個DateTimePicker控制項(first和second)將設定成今天的日期。

  11. 單擊Compare按鈕。

  文字框中會顯示以下內容:

first == second : True
first != second : False
first < second : False
first <= second : True
first > second : False
first >= second : True
  這個結果才是正確的。

  12. 將second這個DateTimePicker控制項的日期調到明天。

  13. 再次單擊Compare按鈕。

  文字框中會顯示以下內容:

first == second : False
first != second : True
first < second : True
first <= second : True
first > second : False
first >= second : False
  同樣地,這些結果是正確的。

  14. 單擊Quit。

相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。