# 30509黃緯廷的C#筆記 ## 0.前情提要 * ==**由於本人為程式語言初學者,此份筆記為我高中自主學習計畫,筆記一切內容由本人觀看學習影片後自行統整,因此內容可能有疏漏或是不完善、錯誤、用字不精準之部分,若有建議,可留言告知,望海涵,謝謝。**== ## 1.自主學習參考影片 * [【C#】3小時初學者教學 |Csharp | C# 教學 | C# 入門 | C++++](https://www.youtube.com/watch?v=T9BeejD3i0g&t=0s) ## 2.環境建置、第一支程式 * 本次自主學習使用==Visual Studio 2022==當作開發環境 ```csharp= System.Console.WriteLine("Hello World!"); ``` ## 3.常見資料型態 & 變數 ### a.常見資料型態一覽 * 字串 例:string"您好" * 字串==需用" "== * 字元 例:char'a' * 字元==需用' '== * 整數 例:int 100 * 浮點數 例:double 1.5 * 布林值 例:bool ture false Visual Studio頁面截圖1 ![螢幕擷取畫面 2024-04-20 213358](https://hackmd.io/_uploads/H17PBSWbC.png) Visual Studio輸出截圖1 ![螢幕擷取畫面 2024-04-20 214456](https://hackmd.io/_uploads/rJ0xwBb-0.png) ### b.指定變數 * 範例 ```csharp= string name = "黃緯廷"; ``` :::warning * string為變數的==資料型態==。 * name為變數的==名稱==。 * "黃緯廷"為==變數內容==。 ::: :::danger * ==變數內容==可中途改變。 * ==資料型態==不可中途改變。 ::: ### c.變數自介 ```csharp= //姓名 黃緯廷 string name = "黃緯廷"; System.Console.WriteLine("姓名"+name); //性別 M(Male) char sex = 'M'; System.Console.WriteLine("性別"+sex); //年紀 18 int age = 18; System.Console.WriteLine("年紀"+age); //身高 158.9 double high = 158.9; System.Console.WriteLine("身高"+high); //是女性? 否 bool is_female = false; System.Console.WriteLine("是女性"+is_female); ``` Visual Studio頁面截圖2 ![螢幕擷取畫面 2024-04-20 214904](https://hackmd.io/_uploads/Sy-YOrZ-0.png) Visual Studio輸出截圖2 ![螢幕擷取畫面 2024-04-20 214929](https://hackmd.io/_uploads/SyLidHbZC.png) ## 4.字串常見用法 ### a.\n換行 :::success * \n為換行作用。 ::: ```csharp= //單程式內換行 System.Console.WriteLine("Hellow \nWorld!"); ``` Visual Studio頁面截圖3 ![螢幕擷取畫面 2024-04-21 142651](https://hackmd.io/_uploads/HyN-QEzbR.png) Visual Studio輸出截圖3 ![螢幕擷取畫面 2024-04-21 142704](https://hackmd.io/_uploads/rkh-Q4GZR.png) ### b.利用反斜線告知特殊符號為字串內容 ```csharp= //利用反斜線告知符號為字串 System.Console.WriteLine("\"Hellow\" \'World!\'"); ``` Visual Studio頁面截圖4 ![螢幕擷取畫面 2024-04-21 143125](https://hackmd.io/_uploads/B1VM7NzbA.png) Visual Studio輸出截圖4 ![螢幕擷取畫面 2024-04-21 143138](https://hackmd.io/_uploads/S1b7m4zbC.png) ### c.字串相加 ```csharp= //字串相加 System.Console.WriteLine("Hellow" + "World!"); ``` Visual Studio頁面截圖5 ![螢幕擷取畫面 2024-04-21 143913](https://hackmd.io/_uploads/BJfkrVGb0.png) Visual Studio輸出截圖5 ![螢幕擷取畫面 2024-04-21 143951](https://hackmd.io/_uploads/SyRkSNMZR.png) ### d.Length判別字串長度 :::success * Length可判別字串長度。 ::: ```csharp= //判別長度 System.Console.WriteLine("Hellow World!".Length); ``` Visual Studio頁面截圖6 ![螢幕擷取畫面 2024-04-21 144305](https://hackmd.io/_uploads/rJeyUNM-R.png) Visual Studio輸出截圖6 ![螢幕擷取畫面 2024-04-21 144315](https://hackmd.io/_uploads/SkIyUVzWA.png) ### e.ToUpper/ToLower轉換大小寫 :::success * ToUpper可轉換大寫。 * ToLower可轉換小寫。 ::: ```csharp= //轉換大寫 System.Console.WriteLine("Hellow World!".ToUpper()); //轉換小寫 System.Console.WriteLine("Hellow World!".ToLower()); ``` Visual Studio頁面截圖7 ![螢幕擷取畫面 2024-04-21 145148](https://hackmd.io/_uploads/HJypwEzW0.png) Visual Studio輸出截圖7 ![螢幕擷取畫面 2024-04-21 145200](https://hackmd.io/_uploads/Skp6D4fZA.png) ### f.Contains判斷字串中是否含有指定內容 :::success * Contains可判斷字串中是否含有指定內容。 ::: ```csharp= //判斷字串中是否含有指定內容 System.Console.WriteLine("Hellow World!".Contains("Hellow")); ``` Visual Studio頁面截圖8 ![螢幕擷取畫面 2024-04-21 145807](https://hackmd.io/_uploads/SJVVFVMbA.png) Visual Studio輸出截圖8 ![螢幕擷取畫面 2024-04-21 145817](https://hackmd.io/_uploads/HyfHYNM-R.png) :::warning * 若無指定內容則判斷False。 ::: ### g.判斷字串中特定位置的值 ```csharp= //判斷字串中特定位置的值([0]表第1位),因此[1]會表示第2位。 System.Console.WriteLine("Hellow World!"[1]); ``` Visual Studio頁面截圖9 ![螢幕擷取畫面 2024-04-21 150823](https://hackmd.io/_uploads/B1dm2EfbA.png) Visual Studio輸出截圖9 ![螢幕擷取畫面 2024-04-21 150833](https://hackmd.io/_uploads/BJ_VnEM-C.png) :::danger * 在C#中[0]表第1位,因此[1]會表示第2位。 ::: ### h.IndexOf判斷字串中特定值的位置 :::success * IndexOf可判斷字串中特定值的位置。 ::: #### h1.判斷字串中特定值的位置 ```csharp= //判斷字串中特定值的位置 System.Console.WriteLine("Hellow World!".IndexOf("H")); ``` Visual Studio頁面截圖10 ![螢幕擷取畫面 2024-04-21 151517](https://hackmd.io/_uploads/Hk646VzWR.png) Visual Studio輸出截圖10 ![螢幕擷取畫面 2024-04-21 151530](https://hackmd.io/_uploads/SyNHpVz-0.png) #### h2.判斷字串中重複特定值的位置 ```csharp= //判斷字串中重複特定值的位置 System.Console.WriteLine("Hellow World!".IndexOf("l")); ``` Visual Studio頁面截圖11 ![螢幕擷取畫面 2024-04-21 160129](https://hackmd.io/_uploads/rJKSdHGZR.png) Visual Studio輸出截圖11 ![螢幕擷取畫面 2024-04-21 160138](https://hackmd.io/_uploads/Sy88uBG-R.png) :::danger * 若欲尋找之值在目標字串中有重複,則優先傳回較先檢索到之值位置。如欲尋找l,則會傳回2而非3。 ::: #### h3.判斷字串中特定字串的位置 ```csharp= //判斷字串中特定字串的位置 System.Console.WriteLine("Hellow World!".IndexOf("World")); ``` Visual Studio頁面截圖12 ![螢幕擷取畫面 2024-04-21 160158](https://hackmd.io/_uploads/B1st_SzWA.png) Visual Studio輸出截圖12 ![螢幕擷取畫面 2024-04-21 160207](https://hackmd.io/_uploads/HyLjOSMZ0.png) :::danger * 若欲尋找之值為字串,則傳回搜尋目標中字串開頭之位置。如欲尋找World,則傳回7。 ::: #### h4.判斷字串中不存在之字串的位置 ```csharp= //判斷字串中不存在之字串的位置 System.Console.WriteLine("Hellow World!".IndexOf("Yes")); ``` Visual Studio頁面截圖13 ![螢幕擷取畫面 2024-04-21 160224](https://hackmd.io/_uploads/r1oTOSfWA.png) Visual Studio輸出截圖13 ![螢幕擷取畫面 2024-04-21 160233](https://hackmd.io/_uploads/r1tAuBf-0.png) :::danger * 若目標中無欲搜尋之目標,則傳回-1。 ::: ### i.Substring切割字串 :::success * Substring可切割字串。 ::: #### i1.切割字串 ```csharp= //切割字串 System.Console.WriteLine("Hellow World!".Substring(7)); ``` Visual Studio頁面截圖14 ![螢幕擷取畫面 2024-04-21 153734](https://hackmd.io/_uploads/HJzcMBGWR.png) Visual Studio輸出截圖14 ![螢幕擷取畫面 2024-04-21 153743](https://hackmd.io/_uploads/HJOAfBzW0.png) #### i2.切割字串至指定位置 ```csharp= //切割字串至指定位置 System.Console.WriteLine("Hellow World!".Substring(7, 3)); ``` Visual Studio頁面截圖15 ![螢幕擷取畫面 2024-04-21 160628](https://hackmd.io/_uploads/BJuSYSMZR.png) Visual Studio輸出截圖15 ![螢幕擷取畫面 2024-04-21 160638](https://hackmd.io/_uploads/BybIYBGZ0.png) :::danger * 括號中第二個數字表由第一數字位置往後計算的位數。如Substring(7, 3)表由第7個位置後切割到後3個字。 ::: ## 5.數字常見用法(整數、浮點數) ### a.四則運算 #### a1.整數與浮點數四則運算 ```csharp= //整數加法 System.Console.WriteLine(2 + 3); //整數減法 System.Console.WriteLine(2 - 3); //整數乘法 System.Console.WriteLine(2 * 3); //整數除法 System.Console.WriteLine(2 / 3); ``` Visual Studio頁面截圖16 ![螢幕擷取畫面 2024-04-28 152128](https://hackmd.io/_uploads/H1xrKujZR.png) Visual Studio輸出截圖16 ![螢幕擷取畫面 2024-04-28 152140](https://hackmd.io/_uploads/S1urK_sbR.png) :::danger * 由於是整數2與整數3之間的運算,因此輸出結果僅為0.6循環小數中的整數部分0。 * 若要輸出浮點數,只需將其中一邊整數改為浮點數即可。 ```csharp= //浮點數除法 System.Console.WriteLine(2.0 / 3); ``` Visual Studio頁面截圖17 ![螢幕擷取畫面 2024-04-28 154210](https://hackmd.io/_uploads/H1C_0usbR.png) Visual Studio輸出截圖17 ![螢幕擷取畫面 2024-04-28 154226](https://hackmd.io/_uploads/BJSt0OobR.png) ::: #### a2.連續四則運算 ```csharp= //先乘除後加減 System.Console.WriteLine(2 + 3 * 5); //括號內先算 System.Console.WriteLine((2 + 3) * 5); ``` Visual Studio頁面截圖18 ![螢幕擷取畫面 2024-04-28 154941](https://hackmd.io/_uploads/r1ZkgYiWC.png) Visual Studio輸出截圖18 ![螢幕擷取畫面 2024-04-28 154952](https://hackmd.io/_uploads/SkbJgYjZA.png) ### b.常用數學方法 :::success * Abs可取絕對值。 * Pow可取次方。 * Sqrt可開根號。 * Max可取較大值。 * Min可取較小值。 * Round可將浮點數四捨五入。 ::: ```csharp= //絕對值 System.Console.WriteLine(System.Math.Abs(-10)); //次方 System.Console.WriteLine(System.Math.Pow(10,3)); //開根號 System.Console.WriteLine(System.Math.Sqrt(16)); System.Console.WriteLine(System.Math.Sqrt(8)); //取較大值 System.Console.WriteLine(System.Math.Max(2,100)); //取較小值 System.Console.WriteLine(System.Math.Min(2, 100)); //浮點數四捨五入 System.Console.WriteLine(System.Math.Round(5.4)); System.Console.WriteLine(System.Math.Round(5.5)); ``` Visual Studio頁面截圖19 ![螢幕擷取畫面 2024-04-28 161112](https://hackmd.io/_uploads/H1VTNKiWC.png) Visual Studio輸出截圖19 ![螢幕擷取畫面 2024-04-28 161121](https://hackmd.io/_uploads/H1nTNYib0.png) :::danger * 次方的使用中,第一個數為底數,第二個數為次方的值。 ::: ## 6.取得用戶輸入 ### a.用戶輸入 :::success * ReadLine可要求用戶端輸入。 ::: ```csharp= //提示用戶輸入名字 System.Console.WriteLine("請輸入您的名字:"); //取得用戶輸入 System.Console.ReadLine(); //提示用戶輸入名字(不換行) System.Console.Write("請輸入您的名字:"); //取得用戶輸入 System.Console.ReadLine(); ``` Visual Studio頁面截圖20 ![螢幕擷取畫面 2024-04-28 161925](https://hackmd.io/_uploads/SJ3yYtj-R.png) Visual Studio輸出截圖20 ![螢幕擷取畫面 2024-04-28 162002](https://hackmd.io/_uploads/HknJtYjbA.png) :::danger * 去掉WriteLine中的Line可拒絕換行 ::: ### b.用戶輸入變數 ```csharp= //提示用戶輸入名字 System.Console.Write("請輸入您的名字:"); //取得用戶輸入 將變數name設為用戶輸入 string name = System.Console.ReadLine(); //輸出歡迎你+用戶名 System.Console.WriteLine("歡迎您" + name + "先生"); ``` Visual Studio頁面截圖21 ![螢幕擷取畫面 2024-04-28 164044](https://hackmd.io/_uploads/HyMRiFsZA.png) Visual Studio輸出截圖21 ![螢幕擷取畫面 2024-04-28 164106](https://hackmd.io/_uploads/HkMAoYj-0.png) :::danger * 當然也可同時取得多個輸入。 ```csharp= //提示用戶輸入名字 System.Console.Write("請輸入您的名字:"); //取得用戶輸入 將變數name設為用戶輸入 string name = System.Console.ReadLine(); //提示用戶輸入年紀 System.Console.Write("請輸入您的年紀:"); //取得用戶輸入 將變數age設為用戶輸入 string age = System.Console.ReadLine(); //輸出歡迎你+用戶名 System.Console.WriteLine("歡迎您" + age + "歲的" + name + "先生"); ``` Visual Studio頁面截圖22 ![螢幕擷取畫面 2024-04-28 164632](https://hackmd.io/_uploads/ryfVatiWR.png) Visual Studio輸出截圖22 ![螢幕擷取畫面 2024-04-28 164651](https://hackmd.io/_uploads/H1GEpFs-R.png) ::: ### c.建立基礎計算機 :::success * Convert可改變資料型態。 * ToInt32可指定改變資料型態為整數。 * ToDouble可指定改變資料型態為浮點數。 ::: #### c1.整數加法計算機 ```csharp= //提示用戶輸入第一個數 System.Console.Write("請輸入第一個數:"); int num1 = System.Convert.ToInt32(System.Console.ReadLine()); //提示用戶輸入第二個數 System.Console.Write("請輸入第二個數:"); int num2 = System.Convert.ToInt32(System.Console.ReadLine()); System.Console.WriteLine(num1 + num2); ``` Visual Studio頁面截圖23 ![螢幕擷取畫面 2024-04-28 223942](https://hackmd.io/_uploads/B1um-kh-0.png) Visual Studio輸出截圖23 ![螢幕擷取畫面 2024-04-28 223959](https://hackmd.io/_uploads/S1SNZ1hW0.png) #### c2.浮點數加法計算機 ```csharp= //提示用戶輸入第一個數 System.Console.Write("請輸入第一個數:"); double num1 = System.Convert.ToDouble(System.Console.ReadLine()); //提示用戶輸入第二個數 System.Console.Write("請輸入第二個數:"); double num2 = System.Convert.ToDouble(System.Console.ReadLine()); System.Console.WriteLine(num1 + num2); ``` Visual Studio頁面截圖24 ![螢幕擷取畫面 2024-04-28 224418](https://hackmd.io/_uploads/HyyBW1hZ0.png) Visual Studio輸出截圖24 ![螢幕擷取畫面 2024-04-28 224438](https://hackmd.io/_uploads/SJJrbJ2ZR.png) ## 7. Array 陣列 ### a.創建陣列 ```csharp= //創建整數陣列 int[] scores = {60, 90, 75, 46, 89}; //輸出陣列內容 System.Console.WriteLine(scores[0]); System.Console.WriteLine(scores[1]); System.Console.WriteLine(scores[2]); System.Console.WriteLine(scores[3]); System.Console.WriteLine(scores[4]); ``` Visual Studio頁面截圖25 ![螢幕擷取畫面 2024-04-28 230016](https://hackmd.io/_uploads/ry-WBy2-C.png) Visual Studio輸出截圖25 ![螢幕擷取畫面 2024-04-28 230024](https://hackmd.io/_uploads/SyZZS13ZC.png) ### b.中途改變陣列內容 ```csharp= //創建整數陣列 int[] scores = {60, 90, 75, 46, 89}; //改變第一位分數為65 scores[0] = 65; //輸出陣列內容 System.Console.WriteLine(scores[0]); System.Console.WriteLine(scores[1]); System.Console.WriteLine(scores[2]); System.Console.WriteLine(scores[3]); System.Console.WriteLine(scores[4]); ``` Visual Studio頁面截圖26 ![螢幕擷取畫面 2024-04-28 230602](https://hackmd.io/_uploads/SkszI13WR.png) Visual Studio輸出截圖26 ![螢幕擷取畫面 2024-04-28 230611](https://hackmd.io/_uploads/HJiML12b0.png) ### c.創建空陣列 ```csharp= //創建字串空陣列,指定陣列內可容納4個值 string[] ages = new string[4]; //設定陣列內容 ages[0] = "18"; ages[1] = "23"; ages[2] = "57"; ages[3] = "69"; System.Console.WriteLine(ages[0]); System.Console.WriteLine(ages[1]); System.Console.WriteLine(ages[2]); System.Console.WriteLine(ages[3]); ``` Visual Studio頁面截圖27 ![螢幕擷取畫面 2024-04-28 232225](https://hackmd.io/_uploads/r1gf91hbR.png) Visual Studio輸出截圖27 ![螢幕擷取畫面 2024-04-28 232235](https://hackmd.io/_uploads/By9Gcy2ZA.png) :::danger ```csharp= //創建字串空陣列,指定陣列內可容納4個值 string[] ages = new string[4]; ``` * 此式中之中括號[指定陣列內可容納之值之數量]不是由0開始計算! ::: ## 8.If(else)判斷句 ### a.if判斷 ```csharp= //設置變數為true bool hungry = true; //如果變數為true if (hungry) //輸出 { System.Console.WriteLine("我就去吃飯"); } ``` Visual Studio頁面截圖28 ![螢幕擷取畫面 2024-04-29 094454](https://hackmd.io/_uploads/BkY6i_3ZR.png) Visual Studio輸出截圖28 ![螢幕擷取畫面 2024-04-29 094514](https://hackmd.io/_uploads/ByYpoO2bC.png) ### b.if, else判斷 ```csharp= //設置變數為false bool rainy = false; //如果變數為true if (rainy) //輸出 { System.Console.WriteLine("我就坐車去上學"); } //若非,則輸出 else { System.Console.WriteLine("我就走路去上學"); } ``` Visual Studio頁面截圖29 ![螢幕擷取畫面 2024-04-29 101816](https://hackmd.io/_uploads/Hy_pXKnZC.png) Visual Studio輸出截圖29 ![螢幕擷取畫面 2024-04-29 101842](https://hackmd.io/_uploads/Syd6mY3Z0.png) ### c.巢狀選擇 ```csharp= //設置變數(分數=40) int score = 40; //若分數為100 if (score == 100) //輸出 { System.Console.WriteLine("Your grade is A!"); } //或是如果分數為80 else if (score >= 80) //輸出 { System.Console.WriteLine("Your grade is B!"); } //或是如果分數為60 else if (score >= 60) //輸出 { System.Console.WriteLine("Your grade is C!"); } //否則 else { System.Console.WriteLine("Your grade is D!"); } ``` Visual Studio頁面截圖30 ![螢幕擷取畫面 2024-04-29 112453](https://hackmd.io/_uploads/Sk3NXqnWA.png) Visual Studio輸出截圖30 ![螢幕擷取畫面 2024-04-29 104555](https://hackmd.io/_uploads/rk5Q9F3ZC.png) ### d.且&& ```csharp= //設置變數(分數=100,畢業=否) int score = 100; bool graduation = false; //若滿足兩個條件(且) if (score == 100 && graduation) //輸出 { System.Console.WriteLine("我給你10000元獎金"); } //若其一不滿足,則輸出 else { System.Console.WriteLine("重修高中"); } ``` Visual Studio頁面截圖31 ![螢幕擷取畫面 2024-04-29 111930](https://hackmd.io/_uploads/H1Zez92-0.png) Visual Studio輸出截圖31 ![螢幕擷取畫面 2024-04-29 111946](https://hackmd.io/_uploads/ryWxz93bA.png) ### e.或|| ```csharp= /設置變數(分數=100,畢業=否) int score = 100; bool graduation = false; //若滿足其一條件(或) if (score == 100 || graduation) //輸出 { System.Console.WriteLine("我給你10000元獎金"); } //否則 else { System.Console.WriteLine("重修高中"); } ``` Visual Studio頁面截圖32 ![螢幕擷取畫面 2024-04-29 113110](https://hackmd.io/_uploads/HyusN5h-A.png) Visual Studio輸出截圖32 ![螢幕擷取畫面 2024-04-29 113121](https://hackmd.io/_uploads/HJl3EqnWR.png) ### f.不等於!= ```csharp= //設置變數(分數=100,畢業=否) int score = 100; bool graduation = false; //若不滿足兩個條件(且) if (score != 100 && !graduation) //輸出 { System.Console.WriteLine("重修高中"); } //若其一滿足,則輸出 else { System.Console.WriteLine("我給你10000元獎金"); } ``` Visual Studio頁面截圖33 ![螢幕擷取畫面 2024-04-29 114442](https://hackmd.io/_uploads/BknxOqnWC.png) Visual Studio輸出截圖33 ![螢幕擷取畫面 2024-04-29 114452](https://hackmd.io/_uploads/Byrbu53W0.png) ## 9.進階計算機 ```csharp= //提示用戶輸入第一個數 System.Console.Write("請輸入第一個數:"); double num1 = System.Convert.ToDouble(System.Console.ReadLine()); System.Console.Write("請輸入要做的運算:"); string oper = System.Console.ReadLine(); //提示用戶輸入第二個數 System.Console.Write("請輸入第二個數:"); double num2 = System.Convert.ToDouble(System.Console.ReadLine()); if (oper == "+") { System.Console.WriteLine(num1 + num2); } else if (oper == "-") { System.Console.WriteLine(num1 - num2); } else if (oper == "*") { System.Console.WriteLine(num1 * num2); } else if (oper == "/") { System.Console.WriteLine(num1 / num2); } else { System.Console.Write("不合法的運算符號"); } ``` ## 10.While迴圈 ### a.while基礎用法 ```csharp= //設置變數為1 int num = 1; //當變數小於5 while (num <= 5) //加1直到5 { System.Console.WriteLine(num); num = num+1; } ``` Visual Studio頁面截圖34 ![螢幕擷取畫面 2024-04-29 151954](https://hackmd.io/_uploads/SJqr9p3-C.png) Visual Studio輸出截圖34 ![螢幕擷取畫面 2024-04-29 152007](https://hackmd.io/_uploads/By5B5TnbC.png) ### b. do, while先執行再判斷 ```csharp= int num = 6; do { System.Console.WriteLine(num); num = num + 1; } ``` Visual Studio頁面截圖35 ![螢幕擷取畫面 2024-04-29 192040](https://hackmd.io/_uploads/HkihzW6bC.png) Visual Studio輸出截圖34 ![螢幕擷取畫面 2024-04-29 192102](https://hackmd.io/_uploads/SJi3MZaZC.png) ## 11.猜數字遊戲 ```csharp= //設置變數 //答案 int answer = 89; //玩家猜測的答案 int guess = 0; //玩家猜測次數 int guess_counts = 0; //猜測次數限制 int guess_limit = 5; //目前獲勝狀況 bool win = false; //告知玩家遊戲玩法 System.Console.WriteLine("猜數字遊戲,請輸入整數,我會告訴你答案更大或更小!"); //先執行 do { //告知玩家動作 System.Console.Write("請輸入猜測:"); //將玩家回應之答案字串轉為整數 guess = System.Convert.ToInt32(System.Console.ReadLine()); //玩家猜測次數+1 guess_counts = guess_counts + 1; //若玩家答案太大 if (guess > answer) { //給予對應提示 System.Console.WriteLine("太大"); } //若玩家答案太小 else if (guess < answer) { //給予對應提示 System.Console.WriteLine("太小"); } //若玩家答案正確 else { //給予對應回應 System.Console.WriteLine("恭喜答對!"); win = true; } } //當玩家未勝利且玩家猜測次數未達猜測次數限制,重複以上 while (guess != answer && guess_counts < guess_limit); //若執行完上述程式,目前獲勝狀況依舊為否 if (win == false) { ////給予對應回應 System.Console.WriteLine("再接再厲!"); } ``` Visual Studio頁面截圖36~37 ![螢幕擷取畫面 2024-04-29 214526](https://hackmd.io/_uploads/H1fbSmpbC.png) ![螢幕擷取畫面 2024-04-29 214556](https://hackmd.io/_uploads/S1GWrQp-0.png) Visual Studio輸出截圖36~37 ![螢幕擷取畫面 2024-04-29 214712](https://hackmd.io/_uploads/ByzWrXaWR.png) ![螢幕擷取畫面 2024-04-29 214630](https://hackmd.io/_uploads/HJY-H76ZC.png) ## 12.For迴圈 ### a.for基礎用法 ```csharp= //for(設置目標變數;判斷迴圈繼續條件;每次執行完前述迴圈執行) for (int x = 1; x <= 5; x = x + 1) { System.Console.WriteLine(x); } ``` Visual Studio頁面截圖38 ![螢幕擷取畫面 2024-04-29 231411](https://hackmd.io/_uploads/Sk99FNp-R.png) Visual Studio輸出截圖38 ![螢幕擷取畫面 2024-04-29 231419](https://hackmd.io/_uploads/Sk95tVpWR.png) ### b.取出陣列中的數 ```csharp= //設置陣列 int[] nums = { 3, 4, 5, 6, 8, 10, 5, 12, 13 }; //for(設置i=0;若i小於陣列長度則再次執行;再次執行前i+1) for (int i = 0; i < nums.Length; i++) { //輸出陣列第i位 System.Console.WriteLine(nums[i]); } ``` Visual Studio頁面截圖39 ![螢幕擷取畫面 2024-04-29 231456](https://hackmd.io/_uploads/HkNjYE6bR.png) Visual Studio輸出截圖39 ![螢幕擷取畫面 2024-04-29 231503](https://hackmd.io/_uploads/HJNitN6WC.png) :::danger * i++與i+=1作用相同於i=i+1。 ::: ## 13.二維陣列 ### a.創建二維陣列 ```csharp= //設置二維陣列 int[,] nums = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; //寫出第[0]橫排第[0]位 System.Console.WriteLine(nums[0, 0]); ``` Visual Studio頁面截圖40 ![螢幕擷取畫面 2024-04-30 111641](https://hackmd.io/_uploads/HkyTz1AbR.png) Visual Studio輸出截圖40 ![螢幕擷取畫面 2024-04-30 111653](https://hackmd.io/_uploads/BkyTM10ZC.png) :::danger * row指的是橫行。 * colume指的是直排。 ::: ### b.創建空二維陣列 ```csharp= //設置空二維陣列 [3row, 4colume] int[,] nums = new int[3, 4]; //宣告[第一橫行,第一直排]值為1 nums[0, 0] = 1; //宣告[第一橫行,第二直排]值為2 nums[0, 1] = 2; ``` Visual Studio頁面截圖41 ![螢幕擷取畫面 2024-04-30 113042](https://hackmd.io/_uploads/SkJmLkAW0.png) Visual Studio輸出截圖41 ![螢幕擷取畫面 2024-04-30 113051](https://hackmd.io/_uploads/HJJm8J0bR.png) ## 14.class 類別 & object 物件 ### a.創建類別(資料型態) :::success * 想創建類別,必須對右方專案名稱點擊右鍵,接著點擊加入->新增項目,然後選取類別後命名即可。 Visual Studio方案總管截圖1 ![螢幕擷取畫面 2024-04-30 131551](https://hackmd.io/_uploads/H1LGeWCbA.png) Visual Studio新增項目截圖1 ![螢幕擷取畫面 2024-04-30 131730](https://hackmd.io/_uploads/ryUGlWR-R.png) ::: ### b.創建物件 * 專案Person.cs ```csharp= //class創建類別接欲創建資料型態名稱 class Person //大括號內定義此資料型態之屬性 { public double height; public int age; public string name; } ``` Visual Studio類別專案頁面截圖1 ![螢幕擷取畫面 2024-04-30 134452](https://hackmd.io/_uploads/SkKQ8ZA-R.png) :::warning * public表示屬性可以在任何地方被存取。 ::: * 專案Program.cs ```csharp= //由模板創造出來的變數person1稱為物件 Person person1 = new Person(); //設定物件屬性 person1.height = 158.9; person1.age = 18; person1.name = "小黃"; System.Console.WriteLine(person1.height); System.Console.WriteLine(person1.age); System.Console.WriteLine(person1.name); ``` Visual Studio頁面截圖42 ![螢幕擷取畫面 2024-04-30 134501](https://hackmd.io/_uploads/HJhrLZC-A.png) Visual Studio輸出截圖42 ![螢幕擷取畫面 2024-04-30 134512](https://hackmd.io/_uploads/H1KUUbAWR.png) ## 15.namespace、using :::success * namespace可將模板做分類跟管理。 * using可在一個C#專案內要求程式使用指定namespace的模板。 ::: ### a.namespace * 專案Person.cs ```csharp! namespace Characters { class Person { public double height; public int age; public string name; } } ``` Visual Studio類別專案頁面截圖2 ![螢幕擷取畫面 2024-04-30 200046](https://hackmd.io/_uploads/S1hY6IA-C.png) ### b.using * 專案Program.cs ```csharp= using Characters; Person person1 = new Person(); person1.height = 158.9; person1.age = 18; person1.name = "小黃"; System.Console.WriteLine(person1.height); System.Console.WriteLine(person1.age); System.Console.WriteLine(person1.name); ``` Visual Studio頁面截圖43 ![螢幕擷取畫面 2024-04-30 200225](https://hackmd.io/_uploads/B1gq-0LAWC.png) Visual Studio輸出截圖43 ![螢幕擷取畫面 2024-04-30 200255](https://hackmd.io/_uploads/SJ5bAIAb0.png) :::warning * System是C#中內建的namespace,而Console為其中的class,因此在專案中使用using System;,即可不用在Console前加上System了! ```csharp= using Characters; using System; Person person1 = new Person(); person1.height = 158.9; person1.age = 18; person1.name = "小黃"; Console.WriteLine(person1.height); Console.WriteLine(person1.age); Console.WriteLine(person1.name); ``` Visual Studio頁面截圖44 ![螢幕擷取畫面 2024-04-30 201114](https://hackmd.io/_uploads/HJWGgP0WC.png) Visual Studio輸出截圖44 ![螢幕擷取畫面 2024-04-30 201124](https://hackmd.io/_uploads/B1bMgvAW0.png) ::: ## 16.method 方法 :::success * method方法,就是可以讓我們在class中定義一些功能來使用。 ::: * 專案class1.cs ```csharp= using System; namespace ConsoleApp14 { class Person { public double height; public int age; public string name; public void SayHi() { Console.WriteLine("你好阿,我叫" + name); } public bool IsAdult() { if (age >= 18) { return(true); } else { return (false); } } } } ``` Visual Studio類別專案頁面截圖3 ![螢幕擷取畫面 2024-04-30 220830](https://hackmd.io/_uploads/HkcKoOAZC.png) :::danger * void表示後面的方法不會有回傳值。 ::: * 專案Program.cs ```csharp= using ConsoleApp14; Person person1 = new Person(); person1.height = 158.9; person1.age = 18; person1.name = "小黃"; person1.SayHi(); person1.IsAdult(); System.Console.WriteLine(person1.IsAdult()); ``` Visual Studio頁面截圖45 ![螢幕擷取畫面 2024-04-30 220838](https://hackmd.io/_uploads/S1kij_0WC.png) Visual Studio輸出截圖45 ![螢幕擷取畫面 2024-04-30 220848](https://hackmd.io/_uploads/B1kij_0bR.png) :::danger * return會回傳資料到呼叫端。 ::: ## 17.Main 方法 :::success * main方法可以幫助C#知道程式是由何處開始執行的,一般情況下C#會自動幫我們把程式處理好。 ::: ```csharp= class Program { static void Main() { System.Console.WriteLine("Hello, World!"); } } ``` Visual Studio頁面截圖46 ![螢幕擷取畫面 2024-04-30 223516](https://hackmd.io/_uploads/SkjpZtCWA.png) Visual Studio輸出截圖46 ![螢幕擷取畫面 2024-04-30 223525](https://hackmd.io/_uploads/S1ip-tA-R.png) :::warning * static是屬於class本身的屬性,而非物件的屬性。 ::: ## 18.constructor 建構方法 :::success * constructor 建構方法,當我們每創建一次物件就會被回傳,他可以幫助我們創建重複類型的物件時,幫助設定需要被重複設定的屬性。 ::: ### a.創建成功時執行建構方法 * 專案class1.cs ```csharp= using System; namespace Characters { class Person { public double height; public int age; public string name; public Person(string particle) { Console.WriteLine("創建成功" + particle); } } } ``` Visual Studio類別專案頁面截圖4 ![螢幕擷取畫面 2024-04-30 230908](https://hackmd.io/_uploads/SyJpKtRWC.png) * 專案Program.cs ```csharp= using Characters; Person person1 = new Person("第一次,真棒!"); person1.height = 158.9; person1.age = 18; person1.name = "小黃"; Person person2 = new Person("第二次,真好!"); person1.height = 185.6; person1.age = 16; person1.name = "小緯"; ``` Visual Studio頁面截圖47 ![螢幕擷取畫面 2024-04-30 231207](https://hackmd.io/_uploads/S1pD9YRWA.png) Visual Studio輸出截圖47 ![螢幕擷取畫面 2024-04-30 231215](https://hackmd.io/_uploads/ryPu5FR-R.png) ### b.簡化需重複設定的屬性 * 專案class1.cs ```csharp= using System; namespace Characters { class Person { public double height; public int age; public string name; public Person(double height, int age, string name) { this.height = height; this.age = age; this.name = name; } } } ``` Visual Studio類別專案頁面截圖5 ![螢幕擷取畫面 2024-04-30 232208](https://hackmd.io/_uploads/rJiQpKAWC.png) * 專案Program.cs ```csharp! using Characters; Person person1 = new Person(158.9, 18, "小黃"); Person person2 = new Person(185.6, 16, "小緯"); System.Console.WriteLine(person1.height); System.Console.WriteLine(person1.age); System.Console.WriteLine(person1.name); System.Console.WriteLine(person2.height); System.Console.WriteLine(person2.age); System.Console.WriteLine(person2.name); ``` Visual Studio頁面截圖48 ![螢幕擷取畫面 2024-04-30 232216](https://hackmd.io/_uploads/Hyur6FRbC.png) Visual Studio輸出截圖48 ![螢幕擷取畫面 2024-04-30 232224](https://hackmd.io/_uploads/rkGL6FAZR.png) ## 19.getter、setter * 專案class1.cs ```csharp= using System; namespace ConsoleApp17 { class Video { public string title; public string auther; //影片類型只有四種:教育,娛樂,音樂,其他 private string type; public Video(string title, string auther, string type) { this.title = title; this.auther = auther; Type = type; } public string Type { get { return type; } set { if ( value == "教育" || value == "娛樂" || value == "音樂" || value == "其他") { type = value; } else { type = "其他"; } } } } } ``` Visual Studio類別專案頁面截圖6 ![螢幕擷取畫面 2024-05-01 220142](https://hackmd.io/_uploads/B1NtiaJMA.png) * 專案Program.cs ```csharp= using ConsoleApp17; using System; Video video1 = new Video("第一集", "小黃", "教育"); Video video2 = new Video("第二集", "小緯", "搞笑"); Console.WriteLine(video1.Type); Console.WriteLine(video2.Type); ``` :::warning * private表示限制屬性只能在class內存取存取。 * 大寫變數Type是小寫type的對外代理人,因為private限制了對type的存取,因此你只能取得大寫Type。 * 當你試圖取得大寫Type,執行期大括號內的程式碼 * get可幫助存取回傳值。 * set可幫我們在判斷後重新設置小寫type的值 * value為我們原先設置在小寫type的值 ::: Visual Studio頁面截圖49 ![螢幕擷取畫面 2024-05-01 220153](https://hackmd.io/_uploads/rJl5jakGC.png) Visual Studio輸出截圖49 ![螢幕擷取畫面 2024-05-01 220215](https://hackmd.io/_uploads/Bkgco61GA.png) ## 20.static attribute 靜態屬性 ### a.創建class的屬性 * 專案class1.cs ```csharp= using System; namespace ConsoleApp18 { class Video { public string title; public string auther; public string type; public static int video_count = 0; public Video(string title, string auther, string type) { this.title = title; this.auther = auther; this.type = type; video_count++; } } } ``` Visual Studio類別專案頁面截圖7 ![螢幕擷取畫面 2024-05-01 222720](https://hackmd.io/_uploads/ByN_ZR1f0.png) * 專案Program.cs ```csharp= using ConsoleApp18; using System; Console.WriteLine(Video.video_count); Video video1 = new Video("第一集", "小黃", "教育"); Console.WriteLine(Video.video_count); Video video2 = new Video("第二集", "小緯", "娛樂"); Console.WriteLine(Video.video_count); ``` Visual Studio頁面截圖50 ![螢幕擷取畫面 2024-05-01 222729](https://hackmd.io/_uploads/rkW9b0yf0.png) Visual Studio輸出截圖50 ![螢幕擷取畫面 2024-05-01 222737](https://hackmd.io/_uploads/BJW9bRkG0.png) ### b.透過物件屬性輸出static * 專案class1.cs ```csharp= using System; namespace ConsoleApp18 { class Video { public string title; public string auther; public string type; public static int video_count = 0; public Video(string title, string auther, string type) { this.title = title; this.auther = auther; this.type = type; video_count++; } public int getVideoCount() { return video_count; } } } ``` Visual Studio類別專案頁面截圖8 ![螢幕擷取畫面 2024-05-01 224320](https://hackmd.io/_uploads/rkyKBRkfR.png) * 專案Program.cs ```csharp= using ConsoleApp18; using System; Video video1 = new Video("第一集", "小黃", "教育"); Console.WriteLine(video1.getVideoCount()); Video video2 = new Video("第二集", "小緯", "娛樂"); Console.WriteLine(video1.getVideoCount()); ``` Visual Studio頁面截圖51 ![螢幕擷取畫面 2024-05-01 224331](https://hackmd.io/_uploads/H1X6SR1GA.png) Visual Studio輸出截圖51 ![螢幕擷取畫面 2024-05-01 224340](https://hackmd.io/_uploads/BJaTHRyM0.png) ## 21.static method 靜態方法 & static class 靜態類別 ### a.設置一個static method :::success * static method就像是一個工具包,不需要創建物件就可以直接執行。 ::: * 專案Tool.cs ```csharp= using System; namespace ConsoleApp19 { class Tool { public static void SayHi() { Console.WriteLine("Hellow!"); } } } ``` Visual Studio類別專案頁面截圖9 ![螢幕擷取畫面 2024-05-01 231555](https://hackmd.io/_uploads/Bkk03AJzR.png) * 專案Program.cs ```csharp= using System; using ConsoleApp19; Tool.SayHi(); ``` Visual Studio頁面截圖52 ![螢幕擷取畫面 2024-05-01 231601](https://hackmd.io/_uploads/r1sbpRkGR.png) Visual Studio輸出截圖52 ![螢幕擷取畫面 2024-05-01 231638](https://hackmd.io/_uploads/SyPf6RkMA.png) ### b.設置一個static class :::success * 因為static method不需要創建物件就可以直接執行,因此可以將它的類別設為靜態,因為它不需要被用於創造物件。 * 當一個類別為static class表示它不需要用於創建物件。 ::: * 專案Tool.cs ```csharp= using System; namespace ConsoleApp19 { static class Tool { public static void SayHi() { Console.WriteLine("Hellow!"); } } } ``` Visual Studio類別專案頁面截圖10 ![螢幕擷取畫面 2024-05-01 232005](https://hackmd.io/_uploads/rJ23a0Jz0.png) :::danger * 此時若在專案Program.cs專案中寫Tool tool = new Tool();就會發生錯誤。 ::: ## 22.inheritance 繼承 :::success * 當兩個class的需創建的屬性大部分重疊時,可以使用inheritance來讓較細之項目與主項目重疊部分簡化。 * 用法是在較細之項目後面加上冒號:,接著打出要繼承的主項目名稱。 ::: * 專案Person.cs ```csharp= using System; namespace ConsoleApp20 { class Person { public string name; public int age; public void PrintName() { Console.WriteLine(this.name); } public void PrintAge() { Console.WriteLine(this.age); } } } ``` Visual Studio類別專案頁面截圖10 ![螢幕擷取畫面 2024-05-02 211920](https://hackmd.io/_uploads/rJ4-7G-GA.png) * 專案Student.cs ```csharp= using System; namespace ConsoleApp20 { class Student:Person { public string school; public Student(string name, int age, string school) { this.name = name; this.age = age; this.school = school; } public void PrintSchool() { Console.WriteLine(school); } } } ``` Visual Studio類別專案頁面截圖11 ![螢幕擷取畫面 2024-05-02 211933](https://hackmd.io/_uploads/S1KzXMbfA.png) * 專案Program.cs ```csharp= using System; using ConsoleApp20; Student student1 = new Student("小黃", 18, "北門高中"); Console.WriteLine(student1.name); Console.WriteLine(student1.age); Console.WriteLine(student1.school); student1.PrintName(); student1.PrintAge(); student1.PrintSchool(); ``` Visual Studio頁面截圖53 ![螢幕擷取畫面 2024-05-02 211940](https://hackmd.io/_uploads/BycEXzWMC.png) Visual Studio輸出截圖53 ![螢幕擷取畫面 2024-05-02 212118](https://hackmd.io/_uploads/ByiD7M-MR.png)