C#教程6:流控制语句
????????在這部分 C# 教程中,將討論流控制。我們定義了幾個關鍵字,使我們能夠控制 C# 程序的流程。
????????在 C# 語言中,有幾個關鍵字用于改變程序的流程。當程序運行時,語句從源文件的頂部執行到底部逐個語句遞進。此流程可以通過特定關鍵字進行更改。語句可以執行多次。有些語句稱為條件語句。它們僅在滿足特定條件時執行。
一、C# if 表達式
if 語句具有以下一般形式:
if (expression) {statement; }if 關鍵字用于檢查表達式是否為真。如果為真,則執行語句。該語句可以是單個語句或復合語句。復合語句由塊包圍的多個語句組成。塊是用大括號括起來的代碼。
Program.cs
var r = new Random();
int n = r.Next(-5, 5);
Console.WriteLine(n);
if (n > 0)
{
??? Console.WriteLine("The n variable is positive");
}
生成一個隨機數。如果數字大于零,我們會向終端打印一條消息。
這兩行生成一個介于 -5 .. 5 之間的隨機整數。
if (n > 0) {Console.WriteLine("The n variable is positive"); }????????使用 if 關鍵字,我們檢查生成的數字是否大于零。 if 關鍵字后跟一對圓括號。在括號內,我們放置一個表達式。該表達式產生一個布爾值。如果布爾值為真,則執行由兩個大括號括起來的塊。在我們的例子中,字符串“The n variable is positive”被打印到終端。如果隨機值為負,則什么也不做。如果我們只有一個表達式,大括號是可選的。
$ dotnet run -3 $ dotnet run -4 $ dotnet run -1 $ dotnet run 1 The n variable is positive滿足條件時,將消息寫入控制臺。
二 、 C# else表達式
????????我們可以使用 else 關鍵字來創建一個簡單的分支。如果 if 關鍵字后面的方括號內的表達式計算結果為 false,則會自動執行 else 關鍵字后面的語句。
Program.cs
var r = new Random(); int n = r.Next(-5, 5);Console.WriteLine(n);if (n > 0) {Console.WriteLine("The number is positive"); } else {Console.WriteLine("The number is negative"); }if 關鍵字后面的塊被執行,或者 else 關鍵字后面的塊被執行。
if (n > 0) {Console.WriteLine("The number is positive"); } else {Console.WriteLine("The number is negative"); }else 關鍵字跟在 if 塊的右花括號之后。它有自己的塊,由一對花括號括起來。
$ dotnet run -3 The number is negative $ dotnet run -1 The number is negative $ dotnet run 2 The number is positiveWe execute the program three times.
三、C# else if表達式
????????我們可以使用 else if 關鍵字創建多個分支。當且僅當不滿足前一個條件時,else if 關鍵字測試另一個條件。請注意,我們可以在測試中使用多個 else if 關鍵字。
Program.cs
var r = new Random(); int n = r.Next(-5, 5);Console.WriteLine(n);if (n < 0) {Console.WriteLine("The n variable is negative"); } else if (n == 0) {Console.WriteLine("The n variable is zero");} else {Console.WriteLine("The n variable is positive"); }以前的程序有一個小問題。零被賦予負值。以下程序將解決此問題。
if (n < 0) {Console.WriteLine("The n variable is negative"); } else if (n == 0) {Console.WriteLine("The n variable is zero"); } else {Console.WriteLine("The n variable is positive"); }????????如果第一個條件評估為真,例如輸入的值小于零,執行第一個程序段,跳過剩余的兩個程序段。如果不滿足第一個條件,則檢查 if else 關鍵字之后的第二個條件。如果第二個條件為真,則執行第二個塊。如果不是,則執行 else 關鍵字之后的第三個塊。如果不滿足先前的條件,則始終執行 else 塊。
$ dotnet run -1 The n variable is negative $ dotnet run 4 The n variable is positive $ dotnet run 1 The n variable is positive $ dotnet run 0 The n variable is zero我們執行程序 3 次。 0 被正確處理。
四、C# switch表達式
????????switch 語句是一個選擇控制流語句。它允許變量或表達式的值通過多路分支控制程序執行流程。它以比使用 if/else if/else 語句組合更簡單的方式創建多個分支。
????????我們有一個變量或表達式。 switch 關鍵字用于根據值列表測試變量或表達式中的值。值列表與 case 關鍵字一起顯示。如果值匹配,則執行 case 后面的語句。有一個可選的默認語句。如果沒有找到其他匹配項,則執行它。
從 C# 7.0 開始,匹配表達式可以是任何非空表達式。
switch 語句相當復雜。
4.1 Selecting day of week
在以下示例中,我們選擇帶有 switch 語句的星期幾。
Program.cs
var dayOfWeek = DateTime.Now.DayOfWeek;switch (dayOfWeek) {case DayOfWeek.Sunday:Console.WriteLine("dies Solis");break;case DayOfWeek.Monday:Console.WriteLine("dies Lunae");break;case DayOfWeek.Tuesday:Console.WriteLine("dies Martis");break;case DayOfWeek.Wednesday:Console.WriteLine("dies Mercurii");break;case DayOfWeek.Thursday:Console.WriteLine("dies Jovis");break;case DayOfWeek.Friday:Console.WriteLine("dies Veneris");break;case DayOfWeek.Saturday:Console.WriteLine("dies Saturni");break; }該示例確定當前星期幾并打印其拉丁語等價物。
switch (dayOfWeek) {... }????????在圓括號中,switch 關鍵字從表達式中獲取一個值,該表達式將被測試。 switch 關鍵字的正文放置在一對或大括號內。在正文中,我們可以放置多個案例選項。每個選項都以 break 關鍵字結尾。
case DayOfWeek.Sunday:Console.WriteLine("dies Solis");break;????????使用 case 語句,我們測試匹配表達式的值。如果它等于 DayOfWeek.Sunday,我們打印拉丁文 dies Solis。
$ dotnet run dies Solis 該計劃于周日運行。4.2 Selecting domain
????????要求用戶輸入域名。域名被讀取并存儲在一個變量中。該變量使用 switch 關鍵字針對選項列表進行測試。
Program.cs
Console.Write("Enter a domain name: ");string domain = Console.ReadLine();domain = domain.Trim().ToLower();switch (domain) {case "us":Console.WriteLine("United States");break;case "de":Console.WriteLine("Germany");break;case "sk":Console.WriteLine("Slovakia");break;case "hu":Console.WriteLine("Hungary");break;default:Console.WriteLine("Unknown");break; }在我們的程序中,我們有一個域變量。我們從命令行讀取變量的值。我們使用 case 語句來測試變量的值。有幾種選擇。例如,如果該值等于“us”,則“United States”字符串將打印到控制臺。
string domain = Console.ReadLine();Input from the user is read from the console.
domain = domain.Trim().ToLower();Trim 方法從潛在的前導和尾隨空格中去除變量。 ToLower 將字符轉換為小寫。現在“us”、“US”、“us”是美國域名的可行選項。
case "us":Console.WriteLine("United States"); break;????????在這種情況下,我們測試域變量是否等于“us”字符串。如果為真,我們會向控制臺打印一條消息。該選項以 break 關鍵字結尾。如果成功評估了其中一個選項,break 關鍵字將終止 switch 塊。
default:Console.WriteLine("Unknown"); break;默認關鍵字是可選的。如果沒有評估任何案例選項,則執行默認部分。
$ dotnet run Enter a domain name: us United States$ dotnet run Enter a domain name: HU Hungary$ dotnet run Enter a domain name: pl Unknown4.3 應用when 表達式
case 語句可以與 when 語句一起使用來指定附加條件。
Program.cs
Console.Write("Enter your age: ");var input = Console.ReadLine();var age = Int32.Parse(input.Trim());switch (age) {case var myAge when myAge < 0:Console.WriteLine("Age cannot be a negative value");break;case var myAge when myAge > 130:Console.WriteLine("This is an unlikely high age");break;default:Console.WriteLine("The entered age is {0}", age);break; }在程序中,要求用戶輸入他的年齡。
case var myAge when myAge < 0:Console.WriteLine("Age cannot be a negative value"); break;????????在 when 表達式的幫助下,我們測試輸入的值是否小于 0。使用 var 關鍵字,我們創建一個臨時的 myAge 變量。
4.4 枚舉算數表達式
對于匹配表達式,我們可以使用任何類型。在下面的示例中,我們使用枚舉。
Program.cs
var color = (Color) (new Random()).Next(0, 7);switch (color) {case Color.Red:Console.WriteLine("The color is red");break;case Color.Green:Console.WriteLine("The color is green");break;case Color.Blue:Console.WriteLine("The color is blue");break;case Color.Brown:Console.WriteLine("The color is brown");break;case Color.Yellow:Console.WriteLine("The color is yellow");break;case Color.Pink:Console.WriteLine("The color is pink");break;case Color.Orange:Console.WriteLine("The color is orange");break;default:Console.WriteLine("The color is unknown.");break; }enum Color { Red, Green, Blue, Brown, Yellow, Pink, Orange }該示例隨機生成一個顏色枚舉。 swith 語句確定生成的顏色值。
$ dotnet run The color is orange$ dotnet run The color is blue$ dotnet run The color is brownWe run the program.
4.5 Switch表達式
Switch 表達式使 switch 語句的語法更加簡潔。它們是在 C# 8.0 中引入的。
Program.cs
Console.Write("Enter a domain name: ");string domain = Console.ReadLine();domain = domain.Trim().ToLower();string result = domain switch {"us" => "United States","de" => "Germany","sk" => "Slovakia","hu" => "Hungary",_ => "Unknown" };Console.WriteLine(result);該變量位于 switch 關鍵字之前。 case?和?:?元素被替換為?=>。默認大小寫替換為 _ 丟棄。主體是表達式,而不是語句。
4.6 C# while 表達式
while 語句是一種控制流語句,允許根據給定的布爾條件重復執行代碼。
while (expression) {statement; }while 關鍵字執行大括號括起來的塊內的語句。每次表達式被評估為真時,都會執行這些語句。
Program.cs
int i = 0; int sum = 0;while (i < 10) {i++;sum += i; }Console.WriteLine(sum);在代碼示例中,我們計算一系列數字中的值的總和。
while 循環包含三個部分。初始化、測試和更新。語句的每次執行稱為一個循環。
int i = 0;我們啟動 i 變量。它用作計數器。
while (i < 10) {... }while 關鍵字后面的圓括號內的表達式是第二階段,即測試。執行主體中的語句,直到表達式被評估為假。
i++;這是 while 循環的最后一個第三階段,即更新。我們增加計數器。請注意,對 while 循環的不當處理可能會導致無限循環。
4.7 Do-while 表達
可以至少運行該語句一次。即使條件不滿足。為此,我們可以使用 do while 關鍵字。
Program.cs
int count = 0;do {Console.WriteLine(count); } while (count != 0);首先執行塊,然后評估真值表達式。在我們的例子中,條件不滿足,do while 語句終止。
五、C# for 表達式
????????如果在循環開始之前知道循環數,我們可以使用 for 語句。在這個結構中,我們聲明了一個計數器變量,它在每次循環重復期間自動增加或減少值。
5.1?簡單的for循環
for 循環具有三個階段:初始化、條件和代碼塊執行以及增量。
Program.cs
for (int i=0; i<10; i++) {Console.WriteLine(i); }在此示例中,我們將數字 0..9 打印到控制臺。
for (int i=0; i<9; i++) {Console.WriteLine(i); }分為三個階段。在第一階段,我們將計數器 i 設為零。這個階段只進行一次。接下來是條件。如果滿足條件,則執行 for 塊內的語句。在第三階段,計數器增加。現在我們重復2、3階段,直到條件不滿足,退出for循環。在我們的例子中,當計數器 i 等于 10 時,for 循環停止執行。
5.2??for循環數組遍歷
for 循環可用于遍歷數組。根據數組的 Length 屬性,我們知道數組的大小。
Program.cs
string[] planets = { "Mercury", "Venus", "Earth","Mars", "Jupiter", "Saturn", "Uranus", "Pluto" };for (int i = 0; i < planets.Length; i++) {Console.WriteLine(planets[i]); }Console.WriteLine("In reverse:");for (int i = planets.Length - 1; i >= 0; i--) {Console.WriteLine(planets[i]); }????????我們有一個包含太陽系中行星名稱的數組。使用兩個 for 循環,我們按升序和降序打印值。
for (int i = 0; i < planets.Length; i++) {Console.WriteLine(planets[i]); }????????通過從零開始的索引訪問數組。第一項的索引為 0。因此,變量 i 被初始化為零。該條件檢查 i 變量是否小于數組的長度。在最后階段,i 變量遞增。
for (int i = planets.Length - 1; i >= 0; i--) {Console.WriteLine(planets[i]); }????????這個 for 循環以相反的順序打印數組的元素。 i 計數器初始化為數組大小。由于索引是從零開始的,因此最后一個元素的索引數組大小為 1。該條件確保計數器大于或等于零。 (數組索引不能為負數)。在第三步中,i 計數器減一。
5.3 更多 for loop表達式
More expressions can be placed in the initialization and iteration phase of the for loop.
Program.cs
var r = new Random(); var values = new int[10];int sum = 0; int num = 0;for (int i = 0; i < 10; i++, sum += num) {num = r.Next(10);values[i] = num; }Console.WriteLine(string.Join(",", values)); Console.WriteLine("The sum of the values is {0}", sum);在我們的示例中,我們創建了一個包含十個隨機數的數組。計算數字的總和。
for (int i = 0; i < 10; i++, sum += num) {num = r.Next(10);values[i] = num; }在 for 循環的第三部分,我們有兩個用逗號分隔的表達式。 i 計數器遞增并將當前數字添加到 sum 變量。
Console.WriteLine(string.Join(",", values));使用 System.String 類的 Join 方法,我們一次性打印出數組的所有值。它們將用逗號分隔。
$ dotnet run 9,3,1,7,9,8,5,6,3,3 The sum of the values is 545.4?嵌套 for 循環
for 語句可以嵌套;即一個 for 語句可以放在另一個 for 語句中。嵌套 for 循環的所有循環都針對外部 for 循環的每個循環執行。
Program.cs
var a1 = new string[] { "A", "B", "C" }; var a2 = new string[] { "A", "B", "C" };for (int i=0; i<a1.Length; i++) {for (int j=0; j<a2.Length; j++){Console.WriteLine(a1[i] + a2[j]);} }在此示例中,我們創建兩個數組的笛卡爾積。
var a1 = new string[] { "A", "B", "C" }; var a2 = new string[] { "A", "B", "C" };我們有兩個數組。每個數組都有樹字母。 caresian 乘積是當一個數組中的每個元素與另一個數組的所有元素配對時。為此,我們使用嵌套的 for 循環。
for (int i=0; i<a1.Length; i++) {for (int j=0; j<a2.Length; j++){Console.WriteLine(a1[i] + a2[j]);} }在另一個父 for 循環內有一個嵌套 for 循環。對于父 for 循環的每個循環,嵌套的 for 循環都會完全執行。
$ dotnet run AA AB AC BA BB BC CA CB CC六、 C# foreach表達式
foreach 結構簡化了對數據集合的遍歷。它沒有明確的計數器。 foreach 語句一一遍歷數組或集合,并將當前值復制到構造中定義的變量中。
Program.cs
string[] planets = { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune" };foreach (string planet in planets) {Console.WriteLine(planet); }在此示例中,我們使用 foreach 語句遍歷一系列行星。
foreach (string planet in planets) {Console.WriteLine(planet); }foreach 語句的用法很簡單。行星是我們迭代的數組。行星是一個臨時變量,具有數組中的當前值。 foreach 語句遍歷所有行星并將它們打印到控制臺。
$ dotnet run Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune七、C# break 表達式
break 語句可用于終止由 while、for 或 switch 語句定義的塊。
Program.cs
var random = new Random();while (true) {int num = random.Next(1, 30);Console.Write("{0} ", num);if (num == 22){break;} }Console.Write('\n');我們定義了一個無限的 while 循環。我們使用 break 語句來擺脫這個循環。我們從 1 到 30 中選擇一個隨機值。我們打印該值。如果該值等于 22,我們將結束無限的 while 循環。
$ dotnet run 18 3 21 26 12 27 23 25 2 21 15 4 18 12 24 13 7 19 10 26 5 22八、C# continue 表達式
continue 語句用于跳過循環的一部分并繼續循環的下一次迭代。它可以與 for 和 while 語句結合使用。
在下面的示例中,我們打印一個不能被 2 除而沒有余數(奇數)的數字列表。
Program.cs
int num = 0;while (num < 1000) {num++;if (num % 2 == 0){continue;}Console.Write($"{num} "); }Console.Write('\n');我們使用 while 循環遍歷數字 1..999。
if (num % 2 == 0) {continue; }如果表達式 num % 2 返回 0,則所討論的數字可以除以 2。執行 continue 語句并跳過循環的其余部分。在我們的例子中,循環的最后一條語句被跳過并且數字不會打印到控制臺。下一次迭代開始。
總結
以上是生活随笔為你收集整理的C#教程6:流控制语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 时间序列:等分布序列(Equidistr
- 下一篇: c# char unsigned_dll