using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _20240902
{
internal class Program
{
static void P1_Array練習()
{
//宣告一個字串陣列,放入資料,並練習取得資料顯示出來。
Console.Write("請輸入您的字串數量: ");
int count = int.Parse(Console.ReadLine());
string[] strArray = new string[count];
Console.WriteLine("請輸入您的字串:");
for (int i = 0; i < count; i++)
{
strArray[i] = Console.ReadLine(); // 使用 i 作為索引
}
// 逐一顯示所有字串
Console.WriteLine("以下是您的字串:");
for (int i = 0; i < count; i++)
{
Console.WriteLine(strArray[i]); // 使用 i 作為索引
}
}
static void P2_練習陣列給值()
{
//宣告一個陣列,使用迴圈放入數值1-10
int[] arr = new int[10];
for (int i = 0; i < 10; i++)
{
arr[i] = i + 1;
}
//印出所有陣列
Console.WriteLine("陣列從第一個讀取到最後一個");
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"陣列內容: arr[{i + 1}]{arr[i]}");
}
//反轉印出
Console.WriteLine("陣列從最後一個讀取到第一個");
for (int i = 9; i >= 0; i--)
{
Console.WriteLine($"陣列內容:arr[{i + 1}] {arr[i]}");
}
//改成用sort
Array.Sort(arr);
Console.WriteLine("陣列排序後:");
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"陣列內容:arr[{i + 1}] {arr[i]}");
}
//sort後,再反轉印出
Array.Reverse(arr);
Console.WriteLine("陣列反轉後:");
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"陣列內容:arr[{i + 1}] {arr[i]}");
}
}
static void P3_練習_費式數列()
{
// 陣列前兩者為1_後面的每個項目都是前兩者相加
Console.Write("請輸入一個數值:");
int count = int.Parse(Console.ReadLine());
int[] arr = new int[count];
arr[0] = 1;
arr[1] = 1;
for (int i = 2; i < count; i++)
{
arr[i] = arr[i - 1] + arr[i - 2];
}
Console.Clear();
Console.WriteLine("產生結果:");
for (int x = 0; x < count; x++)
{
Console.WriteLine($"陣列[{x}] 存放數字:{arr[x]}");
}
}
static void p4_練習_均溫()
{
// 希望產生的結果如圖所示,請協助計算平均溫度
// 26, 28, 29, 31, 35, 34, 36, 37, 36, 32, 28, 18
//Console.WriteLine("01月\\t02月\\t03月\\t04月\\t05月\\t06月\\t07月\\t08月\\t09月\\t10月\\t11月\\t12月 ");
// 使用 double 型別來存儲溫度
double[] temp = { 26, 28, 29, 31, 35, 34, 36, 37, 36, 32, 28, 18 };
// 列印月份標題
for (int i = 0; i < temp.Length; i++)
{
Console.Write($"{(i + 1).ToString("D2")}月\\t");
}// 格式化輸出月份標題
Console.WriteLine("\\n--------------------------------------------------------------------------------------");
// 列印溫度
foreach (var t in temp)
{
Console.Write($"{t}度\\t");
}
// 計算平均溫度
double total = 0;
foreach (var t in temp)
{
total += t;
}
double average = total / temp.Length; // 平均溫度average算法
// 格式化顯示平均溫度
Console.WriteLine($"\\n平均溫度為 {average:F2} 度");
}
static void P5_多維陣列()
{
// 討論多維陣列,請參考這份文件後,練習自己舉一個例子
// <https://learn.microsoft.com/zh-tw/dotnet/csharp/language-reference/builtin-types/arrays#multidimensional-arrays>
//多維度陣列:
//一維度的陣列:簡單的陣列,只有一個資訊。
//二維度的陣列:有兩個資訊,一個是行,一個是列。
//三維度的陣列:有三個資訊,一個是層,一個是行,一個是列。
//以此類推,可以有更多維度的陣列。
//二維陣列舉例:員工的身高和體重。
string[,] employee = new string[2, 3];
//宣告員工表單,第一個維度是員工名稱,第二個維度是身高體重。
employee[0, 0] = "John";
employee[0, 1] = "175";
employee[0, 2] = "70";
employee[1, 0] = "Mary";
employee[1, 1] = "165";
employee[1, 2] = "65";
//所以我也可以這樣寫
string[,] employee02 = { { "John", "175", "70" }, { "Mary", "165", "65" } };
//這邊有兩個括弧,最大的括弧是列,裡面的小括弧則是屬性(欄位)。
//如果要列印員工表單
Console.WriteLine("員工表單:");
for (int i = 0; i < 2; i++) // 列印列
{
for (int j = 0; j < 3; j++) // 列印欄
{
Console.Write(employee[i, j] + "\\t"); // 印出員工名稱和身高體重
}
Console.WriteLine();
}
//列是列車的列,欄是欄杆的欄。
}
static void P6_多維陣列_屬性方法()
{
// 查看多維陣列有哪些屬性和方法
int[,,] apple = new int[2, 5, 9];
Console.WriteLine("apple.Length: " + apple.Length); // 90,查看APPLE的所有元素數量
Console.WriteLine("apple.Rank: " + apple.Rank); // 查看此陣列的維度,此陣列是三維,所以3
Console.WriteLine("apple.GetLength(0): " + apple.GetLength(0));
// 2,GetLength是一種方法(method),這邊設GetLengh為0,表示查看第一維度的元素數量
}
static void P7_多維陣列_取值()
{
//如何取得所有在多維陣列中的值?
//方法一,,用Console.WriteLine來印出所有值
int[,,] apple = new int[3, 3, 3]
{
{
{23, 56, 78},
{12, 34, 90},
{45, 67, 89}
},
{
{11, 22, 33},
{44, 55, 66},
{77, 88, 99}
},
{
{10, 20, 30},
{40, 50, 60},
{70, 80, 90}
}
};
//方法二,for,可行,只是隨著層數越多,內部便需要迴圈越多次。
for (int i = 0; i < apple.GetLength(0); i++)//先抓取第一維度
{
for (int j = 0; j < apple.GetLength(1); j++)//再抓取第二維度
{
for (int k = 0; k < apple.GetLength(2); k++)//最後抓取第三維度
{
Console.Write(apple[i, j, k] + "\\t");//印出所有值
}
Console.WriteLine();//換行
}
Console.WriteLine();//結束
}
Console.WriteLine("下面是foreach方法");
//方法三,foreach,可行。
foreach (var item in apple)
{
Console.Write(item + "\\t");
}
//方法四,join ,不可行
}
static void P8_不規則陣列()
{
// 討論不規則陣列,請參考這份文件後,練習自己舉一個例子
// <https://learn.microsoft.com/zh-tw/dotnet/csharp/language-reference/builtin-types/arrays#jagged-arrays>
//不規則陣列:每一個陣列的元素,同時自己也是一個陣列。
//戶外教學時,遊覽車們是一組陣列,但遊覽車中還有由陣列組成的班級,班級中還有由小隊陣列組成的學生。
//有三台遊覽車,每台遊覽車小隊數量不一定。
string[][] bus = new string[3][];
bus[0] = new string[] { "小隊1", "小隊2", "小隊3" };
bus[1] = new string[] { "小隊4", "小隊5", "小隊6" };
bus[2] = new string[] { "小隊7", "小隊8", "小隊9", "小隊10" };
//[遊覽車0:小隊1,小隊2,小隊3]、[遊覽車1:小隊4,小隊5,小隊6]、[遊覽車2:小隊7,小隊8,小隊9,小隊10]
//也可以這樣
bus[0][0] = "小隊1號";
bus[0][1] = "小隊2號";
bus[0][2] = "小隊3號";
//----------------------------------我是分隔線---------------------------------------------------------
//如何取出小隊?
//方法一 Console.WriteLine(bus[0][0]);
Console.WriteLine("方法一(省略)\\n");
Console.WriteLine(bus[0][0]); //以下省略
Console.WriteLine("for方法\\n");
//----------------------------------我是分隔線---------------------------------------------------------
//方法二 for
for (int i = 0; i < bus.Length; i++) // 抓取遊覽車
{
for (int j = 0; j < bus[i].Length; j++) // 抓取小隊
{
Console.WriteLine(bus[i][j]);//印出每個小隊,為什麼我可以直接這樣做?請參考P9
}
}
//----------------------------------我是分隔線---------------------------------------------------------
//方法三 foreach
Console.WriteLine("foreach方法全顯示-1搭上join\\n");
//方法3-1,你可以穿插兩種方式
//foreach穿插join
foreach (string[] team in bus)
{
Console.WriteLine(string.Join("\\t", team));//join出每個小隊陣列
}
Console.WriteLine("foreach方法全顯示-2搭配for\\n");
//----------------------------------我是分隔線---------------------------------------------------------
//方法3-2,foreach穿插for
foreach (string[] team in bus)
{
for (int j = 0; j < team.Length; j++)
{
Console.WriteLine(team[j]);//印出每個小隊
}
}
//----------------------------------我是分隔線---------------------------------------------------------
//方法四 join (X)
//Console.WriteLine("join方法");
//string result = string.Join("\\t", bus[0]);//join出第一台車的第一個小隊
//Console.WriteLine(result); // 印出第一台車的第一個小隊
//join印不出全部
}
static void P9不規則陣列補充()
{
string[] x = { "皮卡丘", "超夢" };
//假如我們要取得x[0]的第一個字母,可以這樣做
//string firstElement = x[0];
// 然後對這個變數使用 Substring 方法
//string z = firstElement.Substring(0, 1);
//但是,如果我們直接用 x[0].Substring(0, 1) 呢?
string z = x[0].Substring(0, 1); //這邊沒有先指定變數是x[0],且後面還可以直接加.Substring(0,1)?
//舉一反三,假設已經提前知道此變數是一個string,便可以跳過直接指定x[0],然後使用.Substring(0,1)
//那麼陣列也理所應當可以直接使用,詳情查看P8不規則陣列
}
static void Main(string[] args)
{
//P1_Array練習();
//P2_練習陣列給值();
//P3_練習_費式數列();
//p4_練習_均溫();
//P5_多維陣列();
//P6_多維陣列_屬性方法();
//P7_多維陣列_取值();
P8_不規則陣列();
//P9不規則陣列補充();
}
}
}