77
1 陣陣 陣陣 鄭鄭鄭 鄭鄭鄭 鄭鄭鄭鄭鄭鄭 鄭鄭鄭鄭鄭鄭 鄭鄭鄭鄭鄭鄭 鄭鄭鄭鄭鄭鄭 / / 鄭鄭鄭鄭鄭鄭鄭 鄭鄭鄭鄭鄭鄭鄭 / / 鄭鄭鄭鄭鄭鄭鄭 鄭鄭鄭 鄭鄭鄭鄭鄭鄭鄭 鄭鄭鄭

鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

Embed Size (px)

DESCRIPTION

陣列. 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所. 綱要. 一維陣列 亂數產生器 猜數字遊戲 一維陣列的排序、倒排、搜尋 整個陣列的設值與複製 矩形二維陣列 井字遊戲 Tic-tac-toe * 不規則二維陣列 *高維陣列 foreach 敘述. 綱要. 一維陣列 亂數產生器 猜數字遊戲 一維陣列的排序、倒排、搜尋 整個陣列的設值與複製 矩形二維陣列 井字遊戲 Tic-tac-toe * 不規則二維陣列 *高維陣列 foreach 敘述. p1 = 2; p2 = 3; p3 = 5; - PowerPoint PPT Presentation

Citation preview

Page 1: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

1

陣列陣列

鄭士康鄭士康國立台灣大學國立台灣大學

電機工程學系電機工程學系 // 電信工程研究所電信工程研究所 //資訊網路與多媒體研究所資訊網路與多媒體研究所

Page 2: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

2

綱要綱要1.1. 一維陣列一維陣列2.2. 亂數產生器亂數產生器3.3. 猜數字遊戲猜數字遊戲4.4. 一維陣列的排序、倒排、搜尋一維陣列的排序、倒排、搜尋5.5. 整個陣列的設值與複製整個陣列的設值與複製6.6. 矩形二維陣列矩形二維陣列7.7. 井字遊戲井字遊戲 Tic-tac-toeTic-tac-toe8.8. ** 不規則二維陣列不規則二維陣列9.9. ** 高維陣列高維陣列10.10.foreach foreach 敘述敘述

Page 3: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

3

綱要綱要1.1. 一維陣列一維陣列2.2. 亂數產生器亂數產生器3.3. 猜數字遊戲猜數字遊戲4.4. 一維陣列的排序、倒排、搜尋一維陣列的排序、倒排、搜尋5.5. 整個陣列的設值與複製整個陣列的設值與複製6.6. 矩形二維陣列矩形二維陣列7.7. 井字遊戲井字遊戲 Tic-tac-toeTic-tac-toe8.8. ** 不規則二維陣列不規則二維陣列9.9. ** 高維陣列高維陣列10.10.foreach foreach 敘述敘述

Page 4: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

4

前五個質數前五個質數p1 = 2;p1 = 2;

p2 = 3;p2 = 3;

p3 = 5;p3 = 5;

p4 = 7;p4 = 7;

p5 = 11;p5 = 11;

p[0] = 2;p[0] = 2;

p[1] = 3;p[1] = 3;

p[2] = 5;p[2] = 5;

p[3] = 7;p[3] = 7;

p[4] = 11;p[4] = 11;

. . .. . .

Console.WriteLine(p[i-Console.WriteLine(p[i-1]);1]);

Page 5: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

5

一維陣列一維陣列• 一維陣列與陣列索引一維陣列與陣列索引

int[] p = new int [5];p[0]

p[1]

p[2]

p[3]

p[4]

Page 6: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

6

程式程式 Array1D.ProgramArray1D.Program 片段片段const int N = 5;const int N = 5;int[] p = new int[N];int[] p = new int[N];p[0] = 2;p[0] = 2;p[1] = 3;p[1] = 3;p[2] = 5;p[2] = 5;p[3] = 7;p[3] = 7;p[4] = 11;p[4] = 11;int i;int i;for (i = 0; i < N; ++i)for (i = 0; i < N; ++i){{ Console.WriteLine(p[i]);Console.WriteLine(p[i]);}}

Page 7: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

7

注意事項注意事項• 「索引在陣列的界限之外」 錯誤 「索引在陣列的界限之外」 錯誤

– 語意錯誤 語意錯誤 – 需要仔細閱讀程式碼,或以偵錯器追蹤索引的需要仔細閱讀程式碼,或以偵錯器追蹤索引的

變化過程 變化過程

Page 8: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

8

陣列元素宣告並設值的兩種寫法陣列元素宣告並設值的兩種寫法int[] p = new int[5] { 2, 3, 5, 7, 11 };int[] p = new int[5] { 2, 3, 5, 7, 11 };

int[] p = { 2, 3, 5, 7, 11 };int[] p = { 2, 3, 5, 7, 11 };

Page 9: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

9

程式程式 Array1D2.ProgramArray1D2.Program 片段片段int[] p = { 2, 3, 5, 7, 11 };int[] p = { 2, 3, 5, 7, 11 };

int i;int i;

for (i = 0; i < p.Length; ++i)for (i = 0; i < p.Length; ++i)

{ {

Console.WriteLine(p[i]);Console.WriteLine(p[i]);

}}

Page 10: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

10

複利公式複利公式

年數利率本金本利和 1

Page 11: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

11

程式程式 Array1D3.ProgramArray1D3.Program 片段片段Console.Write("Console.Write("輸入年數輸入年數 : ");: ");int n = Int32.Parse(Console.ReadLine());int n = Int32.Parse(Console.ReadLine());double[] m = new double[n];double[] m = new double[n];int i;int i;for (i = 0; i < n; ++i)for (i = 0; i < n; ++i){{ m[i] = c*Math.Pow(1.0 + p, i+1);m[i] = c*Math.Pow(1.0 + p, i+1);}}for (i = 0; i < n; ++i)for (i = 0; i < n; ++i){{ Console.WriteLine("Console.WriteLine("第第 {0}{0}年後的本利和為年後的本利和為 {1}", {1}", i+1, i+1,

m[i]);m[i]);

}}

Page 12: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

12

練習練習• 寫一程式,用迴圈輸入寫一程式,用迴圈輸入 33 位同學成績到一位同學成績到一

維陣列,再用迴圈把所有成績顯示出來維陣列,再用迴圈把所有成績顯示出來 . . • 修改上述程式修改上述程式 , , 使同學人數可以在程式執使同學人數可以在程式執

行時決定行時決定 ..

Page 13: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

13

綱要綱要1.1. 一維陣列一維陣列2.2. 亂數產生器亂數產生器3.3. 猜數字遊戲猜數字遊戲4.4. 一維陣列的排序、倒排、搜尋一維陣列的排序、倒排、搜尋5.5. 整個陣列的設值與複製整個陣列的設值與複製6.6. 矩形二維陣列矩形二維陣列7.7. 井字遊戲井字遊戲 Tic-tac-toeTic-tac-toe8.8. ** 不規則二維陣列不規則二維陣列9.9. ** 高維陣列高維陣列10.10.foreach foreach 敘述敘述

Page 14: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

14

亂數亂數• 依一定機率分佈隨機產生的數依一定機率分佈隨機產生的數• 均勻分佈之亂數通常以整數除法的餘數產均勻分佈之亂數通常以整數除法的餘數產

生生• 亂數產生器亂數產生器• 亂數種子與亂數數列亂數種子與亂數數列

Page 15: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

15

UsingRandom.ProgramUsingRandom.Program 片段片段int seed = 123;int seed = 123;Random rand = new Random(seed);Random rand = new Random(seed);int[] count = new int[10];int[] count = new int[10];for (k = 0; k < 10; ++k)for (k = 0; k < 10; ++k){{ count[k] = 0;count[k] = 0;}}const int N = 1000;const int N = 1000;for (i = 0; i < N; ++i)for (i = 0; i < N; ++i){{ k = rand.Next() % 10;k = rand.Next() % 10; ++count[k];++count[k];}}

Page 16: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

16

產生不固定的亂數數列產生不固定的亂數數列Random rand = new Random();Random rand = new Random();

Page 17: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

17

練習練習• 產生一萬個產生一萬個 00 到到 99 之間的亂數,統計各點之間的亂數,統計各點

數出現次數,以星號繪出對應長條圖數出現次數,以星號繪出對應長條圖 , , 每每個星號代表出現個星號代表出現 5050 次次

• 例如:例如:0 0 ****************************************11 ******************************************22 **************************************33 ****************************************44 **********************************55 ********************************************66 ************************************. . .. . .9 *********************9 *********************

Page 18: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

18

綱要綱要1.1. 一維陣列一維陣列2.2. 亂數產生器亂數產生器3.3. 猜數字遊戲猜數字遊戲4.4. 一維陣列的排序、倒排、搜尋一維陣列的排序、倒排、搜尋5.5. 整個陣列的設值與複製整個陣列的設值與複製6.6. 矩形二維陣列矩形二維陣列7.7. 井字遊戲井字遊戲 Tic-tac-toeTic-tac-toe8.8. ** 不規則二維陣列不規則二維陣列9.9. ** 高維陣列高維陣列10.10.foreach foreach 敘述敘述

Page 19: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

19

遊戲規則遊戲規則• 電腦先隨機產生一個四個位數都不同的四電腦先隨機產生一個四個位數都不同的四

位數作為謎底位數作為謎底– 最高位數字最高位數字 (( 千位數千位數 )) 可以是可以是 00

• 接著使用者猜測一個四位數接著使用者猜測一個四位數• 電腦比較所猜的數字與謎底電腦比較所猜的數字與謎底

– 假設使用者所猜的四個位數中有假設使用者所猜的四個位數中有 mm 位數,不論位數,不論位置,在謎底中出現;而其中位置,在謎底中出現;而其中 nn 位數,其數值位數,其數值與位置都與謎底相同,則電腦告知使用者與位置都與謎底相同,則電腦告知使用者 nnAAmmBB 的訊息的訊息

• 使用者產生下一次所猜的數字 使用者產生下一次所猜的數字

Page 20: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

20

nAmBnAmB 一例一例• 謎底為謎底為 05670567• 所猜數字為所猜數字為 55665566• 55 、、 55 、、 66 、、 66 均出現在謎底中,所以均出現在謎底中,所以 mm

等於等於 44• 其中一個其中一個 55 一個一個 66 與謎底的第二與第三位與謎底的第二與第三位

數之位置與數值均相同,所以數之位置與數值均相同,所以 nn 等於等於 22• 電腦顯示電腦顯示 2A4B 2A4B

Page 21: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

21

虛擬碼虛擬碼1 1 利用亂數產生一個四位數字都不同的四位數利用亂數產生一個四位數字都不同的四位數 xx 2 2 xx 的四個位數為的四個位數為 xdxd[0]~[0]~xdxd[3][3]3 do 3 do {{3.1 3.1 使用者輸入所猜四位數使用者輸入所猜四位數 yy3.2 3.2 決定並輸出決定並輸出 nAnBnAnB3.3 if( 3.3 if( nn == 4 ) == 4 ) {{3.3.1 3.3.1 輸出猜對訊息輸出猜對訊息3.3.2 break3.3.2 break }} } while ( } while ( 猜測次數未達上限 猜測次數未達上限 ))4 4 輸出謎底與猜測次數輸出謎底與猜測次數

Page 22: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

22

決定決定 nAmBnAmB 虛擬碼虛擬碼// // 謎底謎底 xdxd[0]~[0]~xdxd[3][3]// // 使用者輸入使用者輸入 ydyd[0]~[0]~ydyd[3][3]for(for(ii=0; =0; ii<4; ++<4; ++ii)){{ for(for(jj=0; =0; jj<4; ++<4; ++jj)) {{ if( if( ydyd[[ii] != ] != xdxd[[jj] ) continue] ) continue ++++mm if( if( ii == == jj ) ++ ) ++nn breakbreak }}}}

Page 23: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

23

第第 00 版版 GuessingNumber.PrograGuessingNumber.Programm

片段 片段 (1/3)(1/3)xd[0] = '0';xd[0] = '0';xd[1] = '5';xd[1] = '5';xd[2] = '6';xd[2] = '6';xd[3] = '7';xd[3] = '7';char[] yd = new char[4];char[] yd = new char[4];dodo{{ Console.Write("Console.Write("猜一個四位數猜一個四位數 : "); : "); yd = Console.ReadLine().ToCharArray();yd = Console.ReadLine().ToCharArray(); ++nGuess;++nGuess; n = 0;n = 0; m = 0;m = 0;

Page 24: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

24

第第 00 版版 GuessingNumber.PrograGuessingNumber.Programm

片段 片段 (2/3)(2/3) for(i=0; i<4; ++i)for(i=0; i<4; ++i) {{ for(j=0; j<4; ++j)for(j=0; j<4; ++j) {{ if( yd[i] != xd[j] ) continue;if( yd[i] != xd[j] ) continue; ++m;++m; if( i == j ) ++n;if( i == j ) ++n; break;break; }} }} Console.WriteLine("{0}A{1}B", n, m);Console.WriteLine("{0}A{1}B", n, m);

Page 25: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

25

第第 00 版版 GuessingNumber.PrograGuessingNumber.Programm

片段 片段 (3/3)(3/3) if( n == 4 )if( n == 4 ) {{ Console.WriteLine("Console.WriteLine("恭喜恭喜 !!您猜對了您猜對了 ");"); break;break; }}} while( nGuess < maxNGuess );} while( nGuess < maxNGuess );

Page 26: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

26

亂數產生四位數字都不同的四位數亂數產生四位數字都不同的四位數 ::虛擬碼虛擬碼

1 1 設定陣列設定陣列 dd[0]~[0]~dd[9][9] 為’為’ 0’~’9’0’~’9’2 for(2 for(ii=0;=0; i i<4; ++<4; ++ii)) {{ dodo {{ 產生一個產生一個 00 到到 99 之間的亂數之間的亂數 kk 檢查檢查 dd[[kk]] 是否與先前的是否與先前的 xdxd 元素重複元素重複 } while( } while( dd[[kk]] 已出現過 已出現過 )) xdxd[[ii] = ] = dd[[kk]] }}

Page 27: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

27

GuessingNumber.ProgramGuessingNumber.Program 片段 片段 (1/2)(1/2)

char[] d = { '0', '1', '2', '3', '4',char[] d = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };'5', '6', '7', '8', '9' };bool again;bool again;Random rand = new Random();Random rand = new Random();for (i = 0; i < 4; ++i)for (i = 0; i < 4; ++i) {{ dodo {{ k = rand.Next() % 10;k = rand.Next() % 10; again = false;again = false;

Page 28: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

28

GuessingNumber.ProgramGuessingNumber.Program 片段 片段 (2/2)(2/2)

for(j=0; j<i; ++j){for(j=0; j<i; ++j){ if (d[k] != xd[j]) continue;if (d[k] != xd[j]) continue; again = true;again = true; break;break; }} } while( again );} while( again ); xd[i] = d[k];xd[i] = d[k];}}

Page 29: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

29

綱要綱要1.1. 一維陣列一維陣列2.2. 亂數產生器亂數產生器3.3. 猜數字遊戲猜數字遊戲4.4. 一維陣列的排序、倒排、搜尋一維陣列的排序、倒排、搜尋5.5. 整個陣列的設值與複製整個陣列的設值與複製6.6. 矩形二維陣列矩形二維陣列7.7. 井字遊戲井字遊戲 Tic-tac-toeTic-tac-toe8.8. ** 不規則二維陣列不規則二維陣列9.9. ** 高維陣列高維陣列10.10.foreach foreach 敘述敘述

Page 30: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

30

排序、倒排、搜尋排序、倒排、搜尋• 進階課程如演算法與資料結構討論的對象進階課程如演算法與資料結構討論的對象• 一般程式設計的書籍也常介紹初步的方法,一般程式設計的書籍也常介紹初步的方法,

作為陣列處理的範例作為陣列處理的範例• 大多現代的程式語言,包括大多現代的程式語言,包括 C#C# ,都已有現,都已有現

成的函式庫來完成這些工作成的函式庫來完成這些工作• 只說明如何利用這類函式,而不觸及它們只說明如何利用這類函式,而不觸及它們背後的演算法 背後的演算法

Page 31: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

31

UsingArrayProcessingFunctionUsingArrayProcessingFunctionss 片段片段

// // 排序排序Array.Sort(a);Array.Sort(a);

// // 倒排倒排Array.Reverse(a);Array.Reverse(a);

// // 搜尋搜尋 11與與 22的位置的位置int idx = Array.IndexOf(a, 1);int idx = Array.IndexOf(a, 1);Console.WriteLine("First index of 1 in a is {0}", Console.WriteLine("First index of 1 in a is {0}",

idx);idx);idx = Array.IndexOf(a, 2);idx = Array.IndexOf(a, 2);Console.WriteLine("First index of 2 in a is {0}", Console.WriteLine("First index of 2 in a is {0}",

idx);idx);idx = Array.LastIndexOf(a, 1);idx = Array.LastIndexOf(a, 1);

Page 32: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

32

某班學期成績表某班學期成績表

學號 學期成績B645330 88

B645331 92

B645332 86

Page 33: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

33

鍵鍵 (Key)(Key) 與項與項 (Item)(Item)• 鍵鍵

– 排序所根據的一維陣列排序所根據的一維陣列• 項項

– 跟著鍵同時變動,同樣多元素的一維陣列跟著鍵同時變動,同樣多元素的一維陣列

Page 34: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

34

SortingDataArraySortingDataArray 片段 片段 (1/2)(1/2)int N_STUDENTS = 3;int N_STUDENTS = 3;string[] registerNumber = new string[N_STUDENTS];string[] registerNumber = new string[N_STUDENTS];registerNumber[0] = "B645330";registerNumber[0] = "B645330";registerNumber[1] = "B645331";registerNumber[1] = "B645331";registerNumber[2] = "B645332";registerNumber[2] = "B645332";int[] score = new int[N_STUDENTS];int[] score = new int[N_STUDENTS];score[0] = 88;score[0] = 88;score[1] = 92;score[1] = 92;score[2] = 86;score[2] = 86;

Page 35: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

35

SortingDataArraySortingDataArray 片段 片段 (2/2)(2/2)Array.Sort(score, registerNumber);Array.Sort(score, registerNumber);Array.Reverse(registerNumber);Array.Reverse(registerNumber);Array.Reverse(score);Array.Reverse(score);Console.WriteLine("Console.WriteLine(" 名次 名次 \t \t 學號 學號 \t \t 成績成績 ");");for (k = 0; k < N_STUDENTS; ++k)for (k = 0; k < N_STUDENTS; ++k){{ Console.WriteLine(Console.WriteLine( (k+1) + "\t" + registerNumber[k] + "\t" + (k+1) + "\t" + registerNumber[k] + "\t" + score[k]);score[k]);}}

Page 36: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

36

綱要綱要1.1. 一維陣列一維陣列2.2. 亂數產生器亂數產生器3.3. 猜數字遊戲猜數字遊戲4.4. 一維陣列的排序、倒排、搜尋一維陣列的排序、倒排、搜尋5.5. 整個陣列的設值與複製整個陣列的設值與複製6.6. 矩形二維陣列矩形二維陣列7.7. 井字遊戲井字遊戲 Tic-tac-toeTic-tac-toe8.8. ** 不規則二維陣列不規則二維陣列9.9. ** 高維陣列高維陣列10.10.foreach foreach 敘述敘述

Page 37: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

37

ArrayAssignmentAndCopyArrayAssignmentAndCopy片段片段

int seed = 123;int seed = 123;Random rand = new Random(seed);Random rand = new Random(seed);const int N = 10;const int N = 10;int[] a = new int[N];int[] a = new int[N];

for (k = 0; k < N; ++k)for (k = 0; k < N; ++k){{ a[k] = rand.Next() % 10;a[k] = rand.Next() % 10;}}

// // 陣列直接設值的副作用陣列直接設值的副作用 ::以偵錯器觀察以偵錯器觀察 bb和和 aa的變化的變化int[] b = a;int[] b = a;Array.Sort(b); //aArray.Sort(b); //a已隨已隨 bb改變改變

Page 38: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

38

ArrayAssignmentAndCopyArrayAssignmentAndCopy片段片段

// // 陣列複製的效果陣列複製的效果 ::以偵錯器觀察以偵錯器觀察 cc和和 aa的變化的變化int[] c = new int[N];int[] c = new int[N];for (k = 0; k < N; ++k)for (k = 0; k < N; ++k){{ c[k] = a[k];c[k] = a[k];}}Array.Reverse(c); //aArray.Reverse(c); //a不隨不隨 cc倒轉倒轉

// // 陣列複製的效果陣列複製的效果 ::以偵錯器觀察以偵錯器觀察 dd和和 aa的變化的變化int[] d = new int[N];int[] d = new int[N];Array.Copy(a, d, N);Array.Copy(a, d, N);Array.Reverse(d); //aArray.Reverse(d); //a不隨不隨 dd倒轉倒轉

Page 39: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

39

綱要綱要1.1. 一維陣列一維陣列2.2. 亂數產生器亂數產生器3.3. 猜數字遊戲猜數字遊戲4.4. 一維陣列的排序、倒排、搜尋一維陣列的排序、倒排、搜尋5.5. 整個陣列的設值與複製整個陣列的設值與複製6.6. 矩形二維陣列矩形二維陣列7.7. 井字遊戲井字遊戲 Tic-tac-toeTic-tac-toe8.8. ** 不規則二維陣列不規則二維陣列9.9. ** 高維陣列高維陣列10.10.foreach foreach 敘述敘述

Page 40: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

40

某班學生各科成績表某班學生各科成績表 學號 \科目 計算機概論 計算機程式設計

B645330 90 84

B645331 88 86

B645332 86 92

Page 41: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

41

Array2D.ProgramArray2D.Program 片段 片段 (1/3)(1/3)const int N_STUDENTS = 3;const int N_STUDENTS = 3;

const int N_SUBJECTS = 2;const int N_SUBJECTS = 2;

string[] registerNumber = new string[N_STUDENTS];string[] registerNumber = new string[N_STUDENTS];

registerNumber[0] = "B645330";registerNumber[0] = "B645330";

registerNumber[1] = "B645331";registerNumber[1] = "B645331";

registerNumber[2] = "B645332";registerNumber[2] = "B645332";

string[] subject = new string[N_SUBJECTS];string[] subject = new string[N_SUBJECTS];

subject[0] = "subject[0] = "計算機概論計算機概論 ";";

subject[1] = "subject[1] = "計算機程式設計計算機程式設計 ";";

int[,] score = new int[N_STUDENTS,int[,] score = new int[N_STUDENTS, N_SUBJECTS];N_SUBJECTS];

Page 42: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

42

Array2D.ProgramArray2D.Program 片段 片段 (2/3)(2/3)score[0, 0] = 90;score[0, 0] = 90;score[0, 1] = 84;score[0, 1] = 84;score[1, 0] = 88;score[1, 0] = 88;score[1, 1] = 86;score[1, 1] = 86;score[2, 0] = 86;score[2, 0] = 86;score[2, 1] = 92;score[2, 1] = 92;double[] individualAverage = new double[N_STUDENTS];double[] individualAverage = new double[N_STUDENTS];double[] subjectAverage = new double[N_SUBJECTS];double[] subjectAverage = new double[N_SUBJECTS];

Page 43: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

43

Array2D.ProgramArray2D.Program 片段 片段 (3/3)(3/3)for (int i = 0; i < N_STUDENTS; i++)for (int i = 0; i < N_STUDENTS; i++) {{ int sum = 0;int sum = 0; for (int j = 0; j < N_SUBJECTS; j++)for (int j = 0; j < N_SUBJECTS; j++) {{ sum += score[i,j];sum += score[i,j]; }} individualAverage[i] = (double)sum / individualAverage[i] = (double)sum / N_SUBJECTS;N_SUBJECTS;}}

Page 44: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

44

矩形陣列矩形陣列int[ , ] score = new int [3, 2];

score[0,0] score[0,1]

score[1,0] score[1,1]

score[2,0] score[2,1]

score[0,0]

score[0,1]

score[1,0]

score[1,1]

score[2,0]

score[2,1]

Page 45: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

45

處理列處理列 score[0,0] score[0,1]

score[1,0] score[1,1]

score[2,0] score[2,1]

for(i=0; i<N_STUDENTS; ++i) {for(i=0; i<N_STUDENTS; ++i) { for(j=0; j<N_SUBJECTS; ++j) {for(j=0; j<N_SUBJECTS; ++j) {. . .. . .

}}}}

i = 0

i = 1

i = 2

j = 0 j = 1

Page 46: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

46

處理行處理行 score[0,0] score[0,1]

score[1,0] score[1,1]

score[2,0] score[2,1]

for(j=0; j<N_SUBJECTS; ++j) {for(j=0; j<N_SUBJECTS; ++j) { for(i=0; i<N_STUDENTS; ++i) {for(i=0; i<N_STUDENTS; ++i) {. . .. . .

}}}}

i = 0

i = 1

i = 2

j = 0 j = 1

Page 47: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

47

處理列處理列

i=0

i

j=0 j

for(i=0; i<data.GetUpperBound(0); ++i) { for(j=0; j<data.GetUpperBound(1); ++j) {

. . . }}

data[i,j]

Page 48: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

48

處理行處理行

i=0

i

for(j=0; j<data.GetUpperBound(1); ++j) { for(i=0; i<data.GetUpperBound(0); ++i) {

. . . }}

data[i,j]

j=0 j

Page 49: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

49

Array2D2.ProgramArray2D2.Program 片段 片段 (1/(1/2)2)

string[] registerNumber = { string[] registerNumber = { "B645330", "B645331", "B645332" };"B645330", "B645331", "B645332" };int[,] score = { {90, 84},int[,] score = { {90, 84}, {88, 86},{88, 86}, {86, 92} };{86, 92} };int nStudents = score.GetUpperBound(0)+1;int nStudents = score.GetUpperBound(0)+1;int nSubjects = score.GetUpperBound(1)+1;int nSubjects = score.GetUpperBound(1)+1;double[] individualAverage = new double[nStudents];double[] individualAverage = new double[nStudents];double[] subjectAverage = new double[nSubjects];double[] subjectAverage = new double[nSubjects];

Page 50: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

50

Array2D2.ProgramArray2D2.Program 片段 片段 (2/(2/2)2)

Console.WriteLine( Console.WriteLine( ""學號學號 \\\\科目科目 \t\t計算機概論計算機概論 \t\t計算機程式設計計算機程式設計 \t\t兩科平均成兩科平均成績績 ");");

for (int i = 0; i < nStudents; ++i)for (int i = 0; i < nStudents; ++i) {{ Console.Write(registerNumber[i]+" \t");Console.Write(registerNumber[i]+" \t"); for(int j=0; j<nSubjects; ++j)for(int j=0; j<nSubjects; ++j) {{ Console.Write(score[i,j]+" \t\t");Console.Write(score[i,j]+" \t\t"); }} Console.WriteLine("{0:F2}",Console.WriteLine("{0:F2}", individualAverage[i]);individualAverage[i]);}}

Page 51: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

51

練習練習• 寫一程式,設值及印出寫一程式,設值及印出 33 階魔方陣階魔方陣 ((河圖洛河圖洛

書書 ))

Page 52: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

52

綱要綱要1.1. 一維陣列一維陣列2.2. 亂數產生器亂數產生器3.3. 猜數字遊戲猜數字遊戲4.4. 一維陣列的排序、倒排、搜尋一維陣列的排序、倒排、搜尋5.5. 整個陣列的設值與複製整個陣列的設值與複製6.6. 矩形二維陣列矩形二維陣列7.7. 井字遊戲井字遊戲 Tic-tac-toeTic-tac-toe8.8. ** 不規則二維陣列不規則二維陣列9.9. ** 高維陣列高維陣列10.10.foreach foreach 敘述敘述

Page 53: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

53

井字遊戲井字遊戲

Page 54: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

54

棋盤棋盤

0 1 2

0

1

2

0 1 2

0

1

2

0 1 2

3 4 5

6 7 8

Page 55: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

55

虛擬碼虛擬碼11 board board[0,0]~[0,0]~boardboard[2,2][2,2] 設為設為 ' '(' '( 引號內是一個空引號內是一個空白白 ))

22 dodo{{2.1 2.1 顯示棋盤顯示棋盤2.2 2.2 使用者輸入使用者輸入 'x''x' 位置位置2.3 if( 2.3 if( 使用者獲勝 使用者獲勝 || || boardboard 已無空格已無空格 ) break) break2.4 2.4 以亂數決定一個以亂數決定一個 'o''o' 位置位置2.5 if( 2.5 if( 電腦獲勝 電腦獲勝 ) break) break } while( } while( boardboard仍有空格 仍有空格 ))3 3 輸出棋盤及訊息輸出棋盤及訊息

Page 56: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

56

判斷使用者或電腦獲勝的演算法判斷使用者或電腦獲勝的演算法 1 1 設使用者或電腦最新位置在設使用者或電腦最新位置在 i0i0, , j0j02 2 檢查是否成列檢查是否成列 ( ( boardboard[[i0i0, 0] == , 0] == boardboard[[i0i0, 1] == , 1] == boardboard[[i0i0, 2] ) , 2] ) 3 3 檢查是否成行檢查是否成行 ( ( boardboard[0,[0, j0 j0] == ] == boardboard[1, [1, j0j0] == ] == boardboard[2,[2, j0 j0] )] )4 4 檢查主對角線是否均為‘檢查主對角線是否均為‘ x’ x’ 或 ‘或 ‘ o’o’ ( ( boardboard[0, 0] == [0, 0] == boardboard[1, 1] == [1, 1] == boardboard[2, 2] == ‘x[2, 2] == ‘x

’ ’ 或 ‘或 ‘ o’ )o’ )5 5 檢查次對角線是否均為‘檢查次對角線是否均為‘ x’ x’ 或 ‘或 ‘ o’o’ ( ( boardboard[0, 2] == [0, 2] == boardboard[1, 1] == [1, 1] == boardboard[2, 0] == ‘x[2, 0] == ‘x

’ ’ 或 ‘或 ‘ o’ ) o’ )

Page 57: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

57

決定新位置列索引與行索引的決定新位置列索引與行索引的虛擬碼虛擬碼

1 do1 do {{1.1 1.1 產生一個產生一個 00 到到 88的亂數的亂數 kk1.2 1.2 ioio = = k k / 3 / 31.3 1.3 jo jo == k k % 3 % 3 } while( } while( boardboard[[ioio, , jojo] ] 不是空白 不是空白 ))

0 1 2

0

1

2

0 1 2

3 4 5

6 7 8

Page 58: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

58

顯示棋盤的程式片段顯示棋盤的程式片段char[,] board = { {' ', ' ', ' '},char[,] board = { {' ', ' ', ' '}, {' ', 'o', ' '},{' ', 'o', ' '}, {' ', ' ', ' '} };{' ', ' ', ' '} };Console.WriteLine(" 0 1 2 ");Console.WriteLine(" 0 1 2 ");Console.WriteLine(" ");Console.WriteLine(" ");Console.WriteLine("0 {0} | {1} | {2} ",Console.WriteLine("0 {0} | {1} | {2} ", board[0, 0], board[0, 1], board[0, 2]);board[0, 0], board[0, 1], board[0, 2]);Console.WriteLine(" ---+---+---");Console.WriteLine(" ---+---+---");Console.WriteLine("1 {0} | {1} | {2} ", Console.WriteLine("1 {0} | {1} | {2} ", board[1, 0], board[1, 1], board[1, 2]);board[1, 0], board[1, 1], board[1, 2]);Console.WriteLine(" ---+---+---");Console.WriteLine(" ---+---+---");Console.WriteLine("2 {0} | {1} | {2} ", Console.WriteLine("2 {0} | {1} | {2} ", board[2, 0], board[2, 1], board[2, 2]);board[2, 0], board[2, 1], board[2, 2]);Console.WriteLine(" ");Console.WriteLine(" ");

Page 59: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

59

由使用者輸入決定由使用者輸入決定 XX 位置 的程式片位置 的程式片段段

Console.Write(Console.Write(

"" 輸入輸入 xx 位置的座標位置的座標 , , 以逗點分隔以逗點分隔 : ");: ");

string[] input = new string[2];string[] input = new string[2];

input = Console.ReadLine().Split(',');input = Console.ReadLine().Split(',');

int ix = Convert.ToInt16(input[0]);int ix = Convert.ToInt16(input[0]);

int jx = Convert.ToInt16(input[1]);int jx = Convert.ToInt16(input[1]);

board[ix, jx] = 'x';board[ix, jx] = 'x';

Page 60: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

60

加入迴圈加入迴圈bool hasVacancies = true;bool hasVacancies = true;

dodo

{{

//// 此註解代表先前的兩段程式敘述此註解代表先前的兩段程式敘述} while( hasVacancies );} while( hasVacancies );

Page 61: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

61

判斷使用者是否獲勝判斷使用者是否獲勝userWin =userWin = ( (board[ix, 0] == board[ix, 1]) &&( (board[ix, 0] == board[ix, 1]) && (board[ix, 1] == board[ix, 2]) ) ||(board[ix, 1] == board[ix, 2]) ) || ( (board[0, jx] == board[1, jx]) &&( (board[0, jx] == board[1, jx]) && (board[1, jx] == board[2, jx]) ) ||(board[1, jx] == board[2, jx]) ) || ( (board[0, 0] == 'x') &&( (board[0, 0] == 'x') && (board[1, 1] == 'x') &&(board[1, 1] == 'x') && (board[2, 2] == 'x') ) ||(board[2, 2] == 'x') ) || ( (board[0, 2] == 'x') &&( (board[0, 2] == 'x') && (board[1, 1] == 'x') &&(board[1, 1] == 'x') && (board[2, 0] == 'x') );(board[2, 0] == 'x') );

Page 62: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

62

注意事項注意事項• boardboard[[i0i0, 0] == , 0] == boardboard[[i0i0, 1] == , 1] == boardboard[[i0i0, ,

2]2] 不可以直接翻譯成不可以直接翻譯成board[ix, 0] == board[ix, 1] == board[ix, 2]board[ix, 0] == board[ix, 1] == board[ix, 2]

• 會被解讀為會被解讀為( board[ix, 0] == board[ix, 1] ) == ( board[ix, 0] == board[ix, 1] ) ==

board[ix, 2]board[ix, 2]

括弧內的比較結果為括弧內的比較結果為 boolbool 型別,無法與字元型別,無法與字元型別的型別的 board[ix, 2]board[ix, 2] 進行進行 ====運算運算

Page 63: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

63

檢查是否仍有空格檢查是否仍有空格 hasVacancies = false;hasVacancies = false;for (int i = 0; i < 3; ++i)for (int i = 0; i < 3; ++i){{ for (int j = 0; j < 3; ++j)for (int j = 0; j < 3; ++j) {{ if (board[i, j] == ' ')if (board[i, j] == ' ') {{ hasVacancies = true;hasVacancies = true; break;break; }} }}}}

Page 64: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

64

綱要綱要1.1. 一維陣列一維陣列2.2. 亂數產生器亂數產生器3.3. 猜數字遊戲猜數字遊戲4.4. 一維陣列的排序、倒排、搜尋一維陣列的排序、倒排、搜尋5.5. 整個陣列的設值與複製整個陣列的設值與複製6.6. 矩形二維陣列矩形二維陣列7.7. 井字遊戲井字遊戲 Tic-tac-toeTic-tac-toe8.8. ** 不規則二維陣列不規則二維陣列9.9. ** 高維陣列高維陣列10.10.foreach foreach 敘述敘述

Page 65: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

65

對稱矩陣與下三角矩陣對稱矩陣與下三角矩陣

51111085

1141974

1093163

876212

54321

51111085

041974

003163

000212

00001

Page 66: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

66

程式 程式 Array2DAArray2DA/* /*

* * 以下三角矩陣以下三角矩陣 * *

* / x \* / x \

* | x x |* | x x |

* | x x x |* | x x x |

* | x x x x |* | x x x x |

* \ x x x x x /* \ x x x x x /

* *

* * 示範不規則二維陣列之使用示範不規則二維陣列之使用 * *

* 9/29/2008* 9/29/2008

*/*/

Page 67: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

67

不規則二維陣列不規則二維陣列int[][] a = new int [3][];

a[0]= new int[1];

a[1]= new int[2];

a[2]= new int[3];

a[0][0]

a[1][1]

a[2][0] a[2][2]

Page 68: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

68

Array2DA.ProgramArray2DA.Program 片段 片段 (1/(1/2)2)

const int N_ROW = 5;const int N_ROW = 5;int[][] lowerTriangularMatrix = new int[N_ROW][];int[][] lowerTriangularMatrix = new int[N_ROW][];for (int i = 0; i < N_ROW; ++i)for (int i = 0; i < N_ROW; ++i) {{ lowerTriangularMatrix[i] = new int[i + 1];lowerTriangularMatrix[i] = new int[i + 1];}}lowerTriangularMatrix[0][0] = 1;lowerTriangularMatrix[0][0] = 1;lowerTriangularMatrix[1][0] = 2; lowerTriangularMatrix[1][0] = 2; lowerTriangularMatrix[1][1] = 21;lowerTriangularMatrix[1][1] = 21;

Page 69: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

69

Array2DA.ProgramArray2DA.Program 片段 片段 (2/(2/2)2)

for (int i = 0; i < N_ROW; i++)for (int i = 0; i < N_ROW; i++) {{ for (int j = 0; j <for (int j = 0; j < lowerTriangularMatrix[i].Length; j++)lowerTriangularMatrix[i].Length; j++) { {

Console.Write(Console.Write( lowerTriangularMatrix[i][j] + lowerTriangularMatrix[i][j] + "\t");"\t"); }} Console.WriteLine();Console.WriteLine();}}

Page 70: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

70

不規則二維陣列記憶配置不規則二維陣列記憶配置lowerTriangularMatrix[1]

lowerTriangularMatrix[2]

lowerTriangularMatrix[3]

lowerTriangularMatrix[4]

[1][0][1][1][2][0][2][1][2][2][3][0][3][1][3][2][3][3][4][0][4][1][4][2][4][3][4][4]

lowerTriangularMatrix[0] [0][0]

Page 71: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

71

練習練習• 宣告如下稀疏矩陣宣告如下稀疏矩陣 (sparse matrix),(sparse matrix), 分別分別

設定各列長度為設定各列長度為 33 、、 22 、、 44 、、 33 、、 11 ,再,再設各元素的值後輸出 設各元素的值後輸出

00005

00974

013103

000212

00451

Page 72: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

72

綱要綱要1.1. 一維陣列一維陣列2.2. 亂數產生器亂數產生器3.3. 猜數字遊戲猜數字遊戲4.4. 一維陣列的排序、倒排、搜尋一維陣列的排序、倒排、搜尋5.5. 整個陣列的設值與複製整個陣列的設值與複製6.6. 矩形二維陣列矩形二維陣列7.7. 井字遊戲井字遊戲 Tic-tac-toeTic-tac-toe8.8. ** 不規則二維陣列不規則二維陣列9.9. ** 高維陣列高維陣列10.10.foreach foreach 敘述敘述

Page 73: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

73

三維陣列三維陣列

i0 1 2 3

0

1

0

1

2

k

j

Page 74: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

74

Array3D.ProgramArray3D.Program 片段片段int[,,] a = { { {1, 2}, {-1, 1}, {0, 5} },int[,,] a = { { {1, 2}, {-1, 1}, {0, 5} }, { {2, 4}, {1, 3}, {3, 7} },{ {2, 4}, {1, 3}, {3, 7} }, { {4, 0}, {8, -3}, {9, 6} },{ {4, 0}, {8, -3}, {9, 6} }, { {-2, 3}, {5, -2}, {1, 1} } };{ {-2, 3}, {5, -2}, {1, 1} } };for (int i=0;i<a.GetUpperBound(0)+1;++i)for (int i=0;i<a.GetUpperBound(0)+1;++i) {{ for (int j=0;j<a.GetUpperBound(1)+1;++j)for (int j=0;j<a.GetUpperBound(1)+1;++j) {{ for (int k=0;k<a.GetUpperBound(2)+1;++k)for (int k=0;k<a.GetUpperBound(2)+1;++k) {{ Console.Write("a[{0}, {1}, {2}] = {3} \t",Console.Write("a[{0}, {1}, {2}] = {3} \t", i, j, k, a[i, j, k]);i, j, k, a[i, j, k]); }} Console.WriteLine();Console.WriteLine(); }}}}

Page 75: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

75

綱要綱要1.1. 一維陣列一維陣列2.2. 亂數產生器亂數產生器3.3. 猜數字遊戲猜數字遊戲4.4. 一維陣列的排序、倒排、搜尋一維陣列的排序、倒排、搜尋5.5. 整個陣列的設值與複製整個陣列的設值與複製6.6. 矩形二維陣列矩形二維陣列7.7. 井字遊戲井字遊戲 Tic-tac-toeTic-tac-toe8.8. ** 不規則二維陣列不規則二維陣列9.9. ** 高維陣列高維陣列10.10.foreach foreach 敘述敘述

Page 76: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

76

UsingForEach.Program UsingForEach.Program 片段片段string[,] strArray = {string[,] strArray = {

{"Demonstrating", "the", "use", "of", {"Demonstrating", "the", "use", "of",

"foreach"},"foreach"},

{"\nGood", "for", "high", "dimensional", "array"} {"\nGood", "for", "high", "dimensional", "array"}

};};

foreach (string str in strArray)foreach (string str in strArray)

{{

Console.Write(str+" ");Console.Write(str+" ");

}}

Console.WriteLine();Console.WriteLine();

Page 77: 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

77

用多層迴圈的寫法用多層迴圈的寫法for (int i = 0; i<strArray.GetUpperBound(0)+1; ++i)for (int i = 0; i<strArray.GetUpperBound(0)+1; ++i){{ for (int j = 0; j<strArray.GetUpperBound(1)+1; ++for (int j = 0; j<strArray.GetUpperBound(1)+1; ++

j) {j) { Console.Write(strArray[i, j] + " ");Console.Write(strArray[i, j] + " "); }}}}