條件敘述
常見的條件敘述包括:
if
敘述if-else
敘述else if
敘述switch
敘述- 三元運算子(Ternary Operator)
if
敘述
用於在條件為 true 時執行一段程式碼。
語法:if (條件)
{
// 條件為 true 時執行的程式碼
}
範例:
int number = 10;
if (number > 5)
{
System.Console.WriteLine("Number is greater than 5.");
}
if-else
敘述
用於在條件為 true 時執行一段程式碼,否則執行另一段程式碼。
語法:
if (條件)
{
// 條件為 true 時執行的程式碼
}
else
{
// 條件為 false 時執行的程式碼
}
範例:
int number = 3;
if (number > 5)
{
System.Console.WriteLine("Number is greater than 5.");
}
else
{
System.Console.WriteLine("Number is less than or equal to 5.");
}
else if
敘述
用於檢查多個條件,並執行第一個為 true 的條件對應的程式碼。
語法:
if (條件1)
{
// 條件1為 true 時執行的程式碼
}
else if (條件2)
{
// 條件2為 true 時執行的程式碼
}
else
{
// 所有條件均為 false 時執行的程式碼
}
範例:
int number = 7;
if (number > 10)
{
System.Console.WriteLine("Number is greater than 10.");
}
else if (number > 5)
{
System.Console.WriteLine("Number is greater than 5 but less than or equal to 10.");
}
else
{
System.Console.WriteLine("Number is less than or equal to 5.");
}
switch
敘述
用於根據變數的值來執行不同的程式碼區塊。
語法:
switch (變數)
{
case 值1:
// 當變數等於值1時執行的程式碼
break;
case 值2:
// 當變數等於值2時執行的程式碼
break;
default:
// 當變數不等於任何 case 值時執行的程式碼
break;
}
範例:
int day = 3;
switch (day)
{
case 1:
System.Console.WriteLine("Monday");
break;
case 2:
System.Console.WriteLine("Tuesday");
break;
case 3:
System.Console.WriteLine("Wednesday");
break;
default:
System.Console.WriteLine("Invalid day");
break;
}
三元運算子(Ternary Operator)
三元運算子是一種簡化的條件敘述,用於根據條件選擇兩個值之一。
語法:
變數 = (條件) ? 值1 : 值2;
- 如果條件為
true
,則回傳值1
。 - 如果條件為
false
,則回傳值2
。
範例:
int number = 10;
string result = (number > 5) ? "Greater than 5" : "Less than or equal to 5";
Console.WriteLine(result); // 輸出:Greater than 5
模式匹配
從 C# 更高版本 開始,switch
敘述支援模式匹配,可以根據型別或條件來執行不同的程式碼。
範例:
object obj = "Hello";
switch (obj)
{
case int i:
System.Console.WriteLine($"It's an integer: {i}");
break;
case string s:
System.Console.WriteLine($"It's a string: {s}");
break;
default:
System.Console.WriteLine("Unknown type");
break;
}
when 關鍵字
在 switch
敘述中,可以使用 when
關鍵字來進一步過濾條件。
範例:
int number = 15;
switch (number)
{
case int n when n > 10:
System.Console.WriteLine("Number is greater than 10");
break;
case int n when n <= 10:
System.Console.WriteLine("Number is less than or equal to 10");
break;
}
陣列
基本觀念
C# 中的陣列(Array)是一種用來儲存多個相同類型資料的資料結構。
陣列宣告時需指定陣列的類型和大小。語法如下:
type[] arrayName;
例如,宣告一個儲存 int 類型資料的陣列:
int[] numbers;
陣列可以在宣告時初始化,並為每個元素指定初始值。
int[] numbers = {1, 2, 3, 4, 5};
- 這樣的初始化會創建一個長度為5的陣列,並將元素依次設置為1, 2, 3, 4, 5。
指定陣列大小後再初始化(動態初始化):
int[] numbers = new int[5]; // 陣列大小為 5,預設所有元素為 0
陣列的元素是按索引存取的,C# 中的陣列索引是從0開始的。
int[] numbers = {1, 2, 3, 4, 5};
System.Console.WriteLine(numbers[0]); // 輸出:1
System.Console.WriteLine(numbers[4]); // 輸出:5
陣列中的元素是可以修改的,只要索引有效,就可以直接修改對應位置的值。
numbers[2] = 10; // 將第3個元素改為 10
System.Console.WriteLine(numbers[2]); // 輸出:10
C# 提供了 Length
屬性來獲取陣列的大小,即陣列中元素的數量。
int[] numbers = {1, 2, 3, 4, 5};
System.Console.WriteLine(numbers.Length); // 輸出:5
C# 支援多維陣列,常見的有二維陣列
int[,] matrix = new int[3, 3]; // 宣告一個 3x3 的二維陣列
或者,直接用初始化資料來創建:
int[,] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
訪問二維陣列元素:
System.Console.WriteLine(matrix[0, 0]); // 輸出:1
System.Console.WriteLine(matrix[2, 2]); // 輸出:9
通常我們會使用 for
或 foreach
迴圈來遍歷陣列的元素。
- 使用
for
迴圈:
int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.Length; i++)
{
System.Console.WriteLine(numbers[i]);
}
- 使用
foreach
迴圈:
int[] numbers = {1, 2, 3, 4, 5};
foreach (int number in numbers)
{
System.Console.WriteLine(number);
}
陣列的其他操作
陣列排序:
C# 提供了 Array.Sort()
方法來對陣列進行排序。
int[] numbers = {5, 3, 8, 1, 2};
System.Array.Sort(numbers);
foreach (int number in numbers)
{
System.Console.WriteLine(number); // 輸出:1 2 3 5 8
}
陣列反轉:
使用 Array.Reverse()
可以反轉陣列。
int[] numbers = {5, 3, 8, 1, 2};
System.Array.Reverse(numbers);
foreach (int number in numbers)
{
System.Console.WriteLine(number); // 輸出:8 5 3 2 1
}
理解陣列的基本用法是學習 C# 的基礎之一,對於處理和管理大量資料非常有用。
迴圈控制
基本觀念
總而言之,迴圈控制(Loop Control)用於重複執行一段程式碼,直到滿足特定條件為止。我們仔細觀察一下各種迴圈的結構。
for
迴圈用於在已知迴圈次數的情況下執行一段程式碼。
語法:
for (初始化; 條件; 迭代)
{
// 迴圈主體
}
範例:
for (int i = 0; i < 5; i++)
{
System.Console.WriteLine("i = " + i);
}
while
迴圈用於在條件為 true
時重複執行一段程式碼。
語法:
while (條件)
{
// 迴圈主體
}
範例:
int i = 0;
while (i < 5)
{
System.Console.WriteLine("i = " + i);
i++;
}
do-while
迴圈與 while
迴圈類似,但會先執行一次迴圈主體,再檢查條件。
語法:
do
{
// 迴圈主體
} while (條件);
範例:
int i = 0;
do
{
System.Console.WriteLine("i = " + i);
i++;
} while (i < 5);
搭配關鍵字
在迴圈中,可以使用以下關鍵字來控制迴圈的執行流程:
break
用於立即終止迴圈。
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break; // 當 i 等於 5 時終止迴圈
}
System.Console.WriteLine("i = " + i);
}
continue
用於跳過當前迴圈,直接進入下一次迴圈。
for (int i = 0; i < 5; i++)
{
if (i == 2)
{
continue; // 跳過 i 等於 2 的情況
}
System.Console.WriteLine("i = " + i);
}
return
直接返回,終止迴圈。
for (int i = 0; i < 5; i++)
{
if (i == 3)
{
return; // 當 i 等於 3 時返回
}
System.Console.WriteLine("i = " + i);
}
巢狀迴圈
即在一個迴圈中嵌套另一個迴圈,常用於處理多維資料結構(如二維陣列)。
這邊使用陣列來搭配使用:
for
迴圈可以精確控制陣列中行和列的索引。
for (int i = 0; i < 列數; i++) // 外層迴圈:控制列
{
for (int j = 0; j < 行數; j++) // 內層迴圈:控制行
{
// 存取 array[i, j]
}
}
範例:
int[,] array = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
for (int i = 0; i < 3; i++) // 3 列
{
for (int j = 0; j < 4; j++) // 4 行
{
System.Console.Write(array[i, j] + " ");
}
System.Console.WriteLine(); // 每一列中的每一行都輸出過後,執行換行
}
foreach
迴圈可以簡化遍歷過程,但無法直接存取行和列的索引。
int[,] array = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
foreach (int element in array)
{
System.Console.Write(element + " ");
}
- 雖說是二維陣列,不過要知道,在記憶體中,他們就只是連續的記憶空間,每一個空間用來存放數值。
最後,迴圈有一種無窮迴圈的情況,通常需要透過 break
或 return
來終止。
while (true)
{
System.Console.WriteLine("This is an infinite loop!");
break; // 終止迴圈
}
字串方法
我們將針對以下幾種輔助方法的使用作簡單介紹:
Split()
和Join()
。
Split
將字串按指定分隔符分割成陣列。
string[] words = "apple,banana,cherry".Split(','); // ["apple", "banana", "cherry"]
Join
將陣列或集合的元素組合成單一字串。
string combined = string.Join(", ", new string[] { "apple", "banana", "cherry" });
// "apple, banana, cherry"
ToCharArray()
將字串轉換為字符陣列,以便對字符進行逐一操作。
綜合示範:
string pangram = "The man has a dog";
// Step 1: 使用 `Split` 方法將原字串按照空白字符拆分成單詞,並將結果儲存在 `message` 陣列中
string[] message = pangram.Split(' ');
// Step 2: 創建一個新的字串陣列 `newMessage`,其長度與 `message` 相同,用於存儲反轉後的單詞
string[] newMessage = new string[message.Length];
// Step 3: 使用 `for` 迴圈遍歷每個單詞
for (int i = 0; i < message.Length; i++)
{
// 將當前的單詞轉換為字符陣列
char[] letters = message[i].ToCharArray();
// 使用 `Array.Reverse` 方法反轉字符陣列
Array.Reverse(letters);
// 將反轉後的字符陣列轉換回字串,並將其儲存回 `newMessage` 陣列中
newMessage[i] = new string(letters);
}
// Step 4: 使用 `String.Join` 方法將反轉後的單詞重新組合成一個字串,並用空格分隔
string result = String.Join(" ", newMessage);
// 輸出最終結果
Console.WriteLine(result);
/* 輸出
ehT nam sah a god
*/
Array.Reverse()
:反轉陣列中的元素,通常用來反轉字符陣列或數字陣列。
更多的用法會寫在補充觀念那邊,不過也沒辦法囊括所有用法,所以讀者要知道,掌握最基本的用法已經很足夠,其餘的情況都可以透過 網路查詢 來獲得解答。