• 沒有找到結果。

第第六六章章 陣陣 列列

N/A
N/A
Protected

Academic year: 2021

Share "第第六六章章 陣陣 列列"

Copied!
25
0
0

加載中.... (立即查看全文)

全文

(1)

第 第 六 六 章 章 陣 陣 列 列

本章學習目標

認識陣列與一般資料型態的不同 認識一維與二維陣列

學習陣列的應用

(2)

6.1 一維陣列

一維陣列(1-dimensional array)可以存放多個相同資料型態的資料。

6.1.1 一維陣列的宣告與記憶體的配置

要使用陣列必須經過兩個步驟: (1)宣告陣列、(2)配置記憶體給該陣列:

資料型態 陣列名稱[]; // 宣告一維陣列 陣列名稱=new 資料型態[個數]; // 配置記憶體給陣列

格式6.1.1 一維陣列的宣告與 配置記憶體

(3)

下面的範例說明一維陣列宣告的方式,以及如何配置記憶體給它:

01 int score[]; // 宣告整數陣列 score

02 score=new int[4]; // 配置可存放 4 個整數的記憶體空間

執行完第一行後,編譯器會配置一塊記憶體給它,用來儲存指向陣列實 體的位址,如下圖所示:

score ?

int score[];

score 尚末指向陣列實 體的位址,所以 score 的內容為未知

(4)

第二行的記憶體配置動作可由下圖來表示:

陣列是屬於非基本資料型態,因此 score 儲存的是陣列實體的參考位址。

記憶體的 參考位址 Ox1000

score

score[0]

score[1]

score[2]

score[3]

Ox1000 Ox1004 Ox1008 Ox1012

score = new int[4];

配置4 個可供整數儲存的記憶空間

把記憶體空間的參考位址 設給score變數存放

陣列實體

(5)

格式 6.1.1 可以用較簡潔的方式來表示:

下面是宣告整數陣列 score,並配置記憶空間的範例:

int score[]=new int[4]; /* 宣告一個整數陣列 score,同時配置 一塊可存放4 個整數的記憶體空間,

以供該陣列使用*/

格式6.1.2

宣告陣列的同時便配 置記憶體

資料型態 陣列名稱[]=new 資料型態[個數];

(6)

將陣列 score 化為圖形表示:

陣列裡元素的個數

score

陣列名稱

每一格代表一個元素,每個元 素皆可存放整數型態的數值 int score[]=new int[4];

(7)

6.1.2 陣列的另一種宣告方式

Java 也允許我們把 score 陣列宣告成

int[] score; // 宣告 score 變數,其型態為整數陣列

(8)

6.1.3 陣列中元素的表示方法 陣列索引值的編號是由 0 開始。

下圖為 score 陣列中元素的表示法及排列方式:

score[0]

陣列共有 4 個元素

score

1 個元素

int score[]=new int[4];

score[1] score[2] score[3]

3 個元素

(9)

下面的程式是一維陣列的使用範例:

01 // app6_1,一維陣列 02 public class app6_1 03 {

04 public static void main(String args[]) 05 {

06 int i;

07 int a[]; // 宣告整數陣列 a

08 a=new int[3]; // 配置可存放 3 個整數的記憶體空間供整數陣列 a 使用 09 a[0]=5; // 設定第一個元素的值為 5

10 a[1]=8; // 設定第二個元素的值為 8 11

12 for(i=0; i<a.length; i++) // 印出陣列的內容 13 System.out.print("a["+i+"]="+a[i]+",\t");

14

15 System.out.println("\nLength of array = "+a.length); // 印出陣列長度 16 }

17 }

/* app6_1 OUTPUT--- a[0]=5, a[1]=8, a[2]=0, Length of array = 3 ---*/

(10)

取得陣列長度的格式:

陣列名稱.length

如下面的程式片段:

a.length // 印出陣列的長度

格式6.1.3 陣列長度的取得

(11)

6.1.4 陣列初值的設定

在宣告時就給與陣列初值的格式:

資料型態 陣列名稱[]={初值 1,初值 2,…,初值 n};

用此格式來宣告陣列並設定初值時,不需要將陣列元素的個數列出,如 下面的範例:

// 宣告並設定初值

int day[]={31,28,31,30,31,30,31,31,30,31,30,31};

格式6.1.4 陣列初值的設定

(12)

app6_2 是一維陣列設定初值的範例:

01 // app6_2,一維陣列的設值 02 public class app6_2 03 {

04 public static void main(String args[]) 05 {

06 int sum=0;

07 int a[]={15,6,8,7,12,7}; // 宣告整數陣列 a,並設定初值 08

09 for(int i=0;i<a.length;i++) // 計算陣列元素的和 10 sum+=a[i];

11

12 System.out.println("Average "+(float)sum/a.length);

13 } 14 }

/* app6_2 OUTPUT-- Average 9.166667 ---*/

(13)

6.1.5 簡單的範例:找出陣列元素的最大值與最小值 下面的程式碼說明如何找出陣列裡元素的最大值及最小值:

01 // app6_3,比較陣列元素值的大小 02 public class app6_3

03 {

04 public static void main(String args[]) 05 {

06 int i,min,max;

07 int a[]={74,48,30,17,62}; // 宣告整數陣列 a,並設定初值 08

09 min=max=a[0];

10 System.out.print("Elements in array a are ");

11 for(i=0;i<a.length;i++) 12 {

13 System.out.print(a[i]+" ");

14 if(a[i]>max) // 判斷最大值 15 max=a[i];

16 if(a[i]<min) // 判斷最小值 17 min=a[i];

18 }

19 System.out.println("\nMaximum is "+max); // 印出最大值

(14)

20 System.out.println("Minimum is "+min); // 印出最小值 21 }

22 }

/* app6_3 OUTPUT--- Elements in array a are 74 48 30 17 62 Maximum is 74

Minimum is 17

---*/

(15)

6.2 二維陣列

6.2.1 二維陣列的宣告與配置記憶體 二維陣列的宣告與配置記憶空間的格式:

資料型態 陣列名稱[][];

陣列名稱=new 資料型態[列的個數][行的個數];

如下面的範例:

int score[][];

score=new int[4][3];

格式6.2.1

二維陣列的宣告格式

(16)

以較為簡潔的方式來宣告陣列:

資料型態 陣列名稱[][]=new 資料型態[列的個數][行的個數];

以上述的寫法,在宣告的同時即配置一塊記憶體空間,以供該陣列使用:

int score[][]=new int[4][3];

格式6.2.2

二維陣列的宣告格式

(17)

下表為某汽車銷售公司有兩個業務員,於 2005 年的車輛銷售量:

2005 年銷售量 業務員

第一季 第二季 第三季 第四季

1 32 35 26 30

2 34 30 33 31

上面的資料可用一個 2 列 4 行的二維陣列來儲存,也就是把陣列宣告成

int sale[2][4]; // 宣告一個 2 列 4 行的整數陣列 sale

(18)

把 sale 陣列化為圖形表示:

(0,0) 30 (0,0)

32 (0,1) 35 (0,1)

35 (0,2) 26 (0,2)

26 (0,3) 32 (0,3)

30

(1,0) 33 (1,0)

34 (1,1) 34 (1,1)

30 (1,2) 30 (1,2)

33 (1,3) 29 (1,3)

31 1列

2列

1

2

3

4

每一格代表一個元素,每個元素皆為int 型態 陣列 sale

(19)

格式6.2.3 二維陣列初值的 設定格式

二維陣列初值的設定格式:

資料型態 陣列名稱[][]={{ 第 1 列初值 }, { 第 2 列初值 }, { … }, { 第 n 列初值 }};

在宣告時就設定陣列的初值,如下面的範例:

int sale[][]={{30,35,26,32}, // 二維陣列的初值設定 {33,34,30,29}};

(20)

每列的元素個數不同的二維陣列

二維陣列中每列的元素的個數可以不相同,如下面的範例:

int matx[][]={{31,12,14,11}, {33,34,30},

{12,81,32,14,17}};

想先宣告每列元素不相等之二維陣列,可以參考下面的寫法:

int matx[][]=new int[3][]; // 宣告二維陣列,並指定列數 matx[0] = new int[4]; // 指定第一列有 4 個元素 matx[1] = new int[3]; // 指定第二列有 3 個元素 matx[2] = new int[5]; // 指定第三列有 5 個元素

(21)

取得二維陣列的列數與特定列之元素的個數

取得二維陣列的列數與特定列之元素的個數之語法如下:

如下面的程式片段:

matx.length matx[0].length matx[2].length

格式6.2.4

取得二維陣列的列數與 特定列之元素的個數 陣列名稱.length // 取得陣列的列數

陣列名稱[列的索引值].length // 取得特定列元素的個數

(22)

6.2.2 二維陣列元素的引用及存取

下面的範例可列印出兩個業務員的銷售業績,並計算車輛的總銷售量:

01 // app6_4,二維陣列的輸入輸出 02 public class app6_4 03 {

04 public static void main(String args[]) 05 {

06 int i,j,sum=0;

07 int sale[][]={{32,35,26,30},{34,30,33,31}};//宣告陣列並設定初值 08

09 for(i=0;i<sale.length;i++) // 輸出銷售量並計算總銷售量 10 {

11 System.out.print("業務員"+(i+1)+"的業績分別為 ");

12 for(j=0;j<sale[i].length;j++) 13 {

14 System.out.print(sale[i][j]+" ");

15 sum+=sale[i][j];

16 }

17 System.out.println(); // 列印換行 18 }

19 System.out.println("\n 總銷售量為"+sum+"部車");

20 } 21 }

/* app6_4 OUTPUT--- 業務員1 的業績分別為 32 35 26 30 業務員2 的業績分別為 34 30 33 31

總銷售量為251 部車

---*/

(23)

6.3 多維陣列

下面的範例說明如何在三維陣列裡,找出所有元素的最大值:

01 // app6_5,

02 public class app6_5 03 {

04 public static void main(String args[]) 05 {

06 int A[][][]={{{21,32,65}, 07 {78,94,76}, 08 {79,44,65}, 09 {89,54,73}}, 10 {{32,56,89}, 11 {43,23,32}, 12 {32,56,78}, 13 {94,78,45}}};

14

15 int i,j,k,max=A[0][0][0]; // 設定 max 為 A 陣列的第一個元素 16

17 for(i=0;i<A.length;i++) // 外層迴圈 18 for(j=0;j<A[i].length;j++) // 中層迴圈 19 for(k=0;k<A[i][j].length;k++)// 內層迴圈 20 if(max<A[i][j][k])

21 max=A[i][j][k];

設定 2×4×3 陣列的初值

利用三個for 迴 圈 找 出 陣 列 的 最大值

(24)

22

23 System.out.println("max="+max); // 印出陣列的最大值 24 }

25 }

/* app6_5 OUTPUT--- max=94

---*/

(25)

參考文獻

相關文件

For periodic sequence (with period n) that has exactly one of each 1 ∼ n in any group, we can find the least upper bound of the number of converged-routes... Elementary number

sort 函式可將一組資料排序成遞增 (ascending order) 或 遞減順序 (descending order)。. 如果這組資料是一個行或列向量,整組資料會進行排序。

所以 10 個數字 個數字 個數字 個數字 pattern 就產生 就產生 就產生 就產生 10 列資料 列資料 列資料 列資料 ( 每一橫 每一橫 每一橫

[r]

ðWinner winner, chicken

[r]

[r]

[r]