前言
上一篇文章我們簡單介紹了基本的資料型別與建構子,而這一篇控制流程也屬於較基礎的文章,若您已經有高階程式開發經驗,只需要看看語法上的差異。控制流程主要介紹 if, switch 判斷、 for, foreach, while 迴圈與breank, continue 跳躍指令,若不考慮可讀性、可維護性、物件導向...等,您可以透過這些語法完成大部分的程式,但這篇文章,仍會告知您如何使用比較佳。本篇文章若有錯誤或任何建議,請各位先進不吝指教,謝謝。介紹
程式流程主要可以分成三大類:判斷、迴圈與跳躍,而這些控制流程也是程式主要組成的要素。判斷為依據目前情境,進行不同運算與操作;迴圈為有規律地、重複地進行特定區塊的程式;跳躍則是略過某些程式流程,直達下一步,我們將逐一介紹:if else 敘述式
if - else 為我們判斷敘述式,以下列程式為例:1. 當變數 input 大於 0 的時候, classify 內容被指定為 positive
2. 當變數 input 等於 0 的時候, classify 內容被指定為 0
3. 當變數 input 不符合上述所有條件的時候, classify 內容被指定為 negative
if (input > 0) { classify = "positive" } else if (input == 0) { classify = "zero"; } else { classify = "negative"; }若您的 if 內程式區塊只有一行,您可以不加上 { } 區分程式區塊。但依據經驗,這區塊程式修改後是最常發生問題的區塊:往往增加程式行數後遺忘 { };另一方面為了程式閱讀的一致性,在 C# 程式開發,我們強烈建議加上 { },無論你的 if 內程式有幾行。
(X)
if (input > 0)
classify = "positive";
(O)
if (input > 0)
{
classify = "positive";
}
我們可以透過 ? 運算子,增加判斷式的可讀性。以下面程式為例...
if (input > 0) { classify = "positive"; } else { classify = "negative"; }
我們能改寫成下列:當 input 大於 0 成立的時候,classify 為 positive;反之則為 negative,這是一個有效縮短程式,且增加可讀性的撰寫方法。
classify = (input > 0) ? "positive" : "negative";
另一個 ?? 運算子則是用於判斷 NULL,以下列程式為例,若 x 為 null, y 則被指定為 -1
int? x = null; int y = x ?? -1;
(O)處理 null 是一件相當耗費人力與效能的事情,無論在程式或資料庫,請盡可能不要讓您的資料、變數可為 null。
switch 判斷式
switch 也是判斷式之一,依據不同的情境案例,進行不同的程式運算,可以用來取代 if-else判斷式。如下列程式為例,整數變數 case 若為1,則印出 "Case 1"於銀幕上;若為 2,則印出 "Case 2";若皆不符合條件,則印出 "Default"。int choice = 1; switch (choice) { case 1: Console.WriteLine("Case 1"); break; case 2: Console.WriteLine("Case 2"); break; default: Console.WriteLine("Default"); break; }
for 迴圈
透過迴圈,我們能夠重複執行某程式區塊數次,如下列程式為例,我們指定計數器 i 從 0 開始,,每執行一次程式計數器 +1 ,直到 計數器 < 10 為止。程式會列印出 10 次 this is a loop !!for (int i = 0; i < 10; i++) { Console.WriteLine("this is a loop !!"); }
迴圈也常常用於 array 與 list 等集合型別操作,以下列程式為例,我們有個大小為 10 陣列,儲存10份成績,我們可以藉由迴圈對陣列內每一個元素作操作。程式會列印出所有成績。
string[] score = {"63", "70", "50", "88", "77", "65", "100", "75", "77", "70"}; for (int i = 0; i < score.Length; i++) { Console.WriteLine(score[i]); }
foreach 迴圈
類似於 for 迴圈,foreach 能依序對集合內的元素進行操作,不同於 for 迴圈的地方, 在於沒有計數器,能呈現的迴圈操作較少。List<string> score = new List<string>(); score.Add("67"); score.Add("99"); score.Add("83"); foreach(var item in score) { Console.WriteLine(item); }
while 與 do while
判斷式與迴圈的結合,莫過於使用 while 與 do while,在達到符合條件之前,迴圈會持續執行。而兩者的差異在於 do while 是先執行後判斷,而while 為先判斷在執行。int n = 1; while (n < 6) { Console.WriteLine("Current value of n is {0}", n); n++; }
int x = 0; do< { Console.WriteLine(x); x++; } while (x < 5);
break 與 continue
break 與 continue 為跳躍指令。以迴圈為例:當迴圈程式執行到這兩個指令,會進行跳出迴圈與持續下一迴圈的操作行為。for (int i = 1; i <= 100; i++) { if (i == 3) { break; } Console.WriteLine(i); }
// 輸出
1
2
for (int i = 1; i <= 10; i++) { if (i < 5) { continue; } Console.WriteLine(i); }
//輸出上一篇:[C#][Visual Studio] 資料型態與運算子
6
7
8
9
10
下一篇:[C#][Visual Studio] 方法 Method
參考資料
1. Study4TW 內部教材2. ?: 運算子 (C# 參考) - Microsoft docs
2. ?? 運算子 (C# 參考) - Microsoft docs
9 留言
那個...這一段你寫錯了,stringArray是不需要new string的,這樣才對。
回覆刪除string[] score = {"63", "70", "50", "88", "77", "65", "100", "75", "77", "70"};
for (int i = 0; i < score.count ; i++)
{
Console.WriteLine(score[i]);
}
感謝提醒,
刪除寫到昏頭忘記確認寫程式與法,已修正 :) 。
int case = 1;
刪除switch (case)
{
case 1:
Console.WriteLine("Case 1");
break;
case 2:
Console.WriteLine("Case 2");
break;
default:
Console.WriteLine("Default");
break;
}
case沒辦法拿來當變數名稱,需要用case1才行,不然無法執行
感謝提醒,我真是太不嚴謹了。
刪除已經修正,謝謝您 :)
好讚阿~謝謝尼0w0
回覆刪除對於初學者,
回覆刪除謝謝有你的文章QwQ~~
謝謝啦OWO!!!
回覆刪除我不太懂程式 正在學c#,如有冒犯請見諒。
回覆刪除想問下其中您文章提到﹝若為 2,則印出 "Case 1"﹞是否應該是印出Case 2 ?
謝謝
你是對的,這邊筆誤。
刪除感謝提醒