Java 程式設計(二) :第三章 二維陣列 下一頁 |
第三章 二維陣列 3-1 二維陣列
3-1-1 二維陣列結構 既然陣列是由若干個相同資料型態的變數整合而成,變數的排列格式也延伸了不同的陣列格式。如果所有變數排列成一行或一列,則稱之為『一維陣列』(如 array[]);如果排列成平面形狀,則稱為『二維陣列』(如 array[][]);如果是立體形狀,則為『三維陣列』(如 array[][][]);如是四度空間型態,則是『四維陣列』(如 array[][][][]),其中每一維都需要一個變數作為指標,索引其相對位置。各種陣列型態都有其運用範圍,如沒有特殊情況的話,還是一維與二維陣列的應用最普遍,本書僅介紹到二維陣列,更多維數陣列的處理方式,也大致相同的。 將變數排列成『縱橫』的平面形狀,則稱之為『二維陣列』。二維陣列需要兩個位置指標,如 score[x][y] 變數,前面指標(如 x)是標示第幾行數(由 0 開始); 第二個指標(如 y),則標示第幾列數;如是 4 * 3 陣列共計有 12 個相同型態(int)變數的元素。另外,陣列被宣告完成之後(如 int score[][] = { ..})。以 score[][] 陣列為例,java 利用 score.length 變數來表該陣列的行數。又 Java 允許陣列中各行的列數目不一定要相同,以 score[x].length 表示該行(x)元素的數目(即是列數目)。陣列內各元素與行列變數的表示方法,如圖 3-1 所示。
圖 3-1 二維陣列的結構 3-1-2 二維陣列宣告 陣列的宣告方法有兩種,一者先宣告陣列變數名稱與結構,當需要使用時再指定所需空間,其稱之為動態宣告。另一者是宣告時就限定空間並給予出直,稱之為靜態宣告。語法分別如下:
第一行語法是宣告產生二維陣列,第二行則再給予初值。如敘述句如:int [] [] score = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};則產生各個元素與變數內容如下: score[0][0] = 1, score[0][1]=2, score[0][2]=3 =>score[0].length=3 score[1][0] = 4, score[1][1]=5, score[1][2]=6, score[1][3]=7 =>score[1].length=4 score[2][0] = 8, score[2][1]=9 =>score[2].length=2 score[3][0] = 10, score[3][1]=11, score[3][2]=12 =>score[3].length=3 score.length = 4 3-1-3 範例研討:印出二維陣列內容 (A)程式功能:Ex3_1.java 請編寫一程式,印出陣列 score [][] = {{1, 2, 3}, {4, 5, 6},{7, 8, 9}, {10, 11, 12}} 內容並依照相對位置排列(平面形狀)。 期望操作介面如下:
(B)製作技巧研討: 吾人利用 x 與 y 變數作為陣列位置索引,x 是行數指標,y 為列數指標,則任何一元素可由 score[x][y] 表示。如欲平面型態印出陣列內容,則需要二重迴圈敘述,外迴圈標示共計列印幾行(x = 0, 1, …, score.length);內迴圈索引每行的列數(y = 0, 1, 2, …, score[x].length)。 (C)程式範例:
(D) 程式重點說明:
3-1-4 範例研討:將二維陣列內容加倍 (A)程式功能:Ex3_2.java 請編寫一程式,請修改 Ex3_1 範例,將陣列 score [][] = {{1, 2, 3}, {4, 5, 6},{7, 8, 9}, {10, 11, 12}} 內容加 3 倍,再依照相對位置排列(平面形狀)。 期望操作介面如下:
(B)製作技巧提示: 我們建構一個比較容易擴充的程式,將 score[][] 宣告成類別變數,使其允許類別內所有方法使用,又將列印陣列的功能製作成一個獨立的 disp_arr() 方法,程式架構如圖 3-2 所示。
圖 3-2 Ex3-2 程式架構 (C) 程式範例
3-1-5 自我挑戰:印出最高與最低成績者 (A)程式功能:PM3_1.java 數學老師利用一個二維陣列儲存某一班級學生的成績,score[][] = {{411101, 70}, {411102, 80}, {411103, 75}, {411104, 90}, {411105, 85}, {4111106, 65}, {411107, 83}, {411108, 78}}。請編寫一程式列印出該班成績最高與最低分數與姓名,期望操作介面如下:
(B)製作技巧提示: 二維陣列(score[][])的每行(score[i], i =0, 1, 2 .., 7)紀錄一筆學生資料,第 0 列(score[i][0])儲存學號、第 1 列(score[i][1])儲存數學成績。吾人可利用兩只一維陣列(max[] 與 min[])儲存最高成績與最低成績,其中第 0 列(如max[0])儲存學號、第 1 列(如max[1])存放成績。圖 3-# 為搜尋運作程序,起先將最高成績的陣列設定為 0(max = {0, 0});最低成績設定成超過成績界線(min = {0, 999}),再依序比較每位學生成績,如果高於 max,則該紀錄複製到 max 陣列內;如果低於 min,則複製到 min 上。如此由第 0 筆到最後一筆搜尋之後,max 與 min 陣列分別得到最高與最低成績的紀錄。虛擬碼提示如下:
圖 3-3 最高與最低成績搜尋
3-1-6 自我挑戰:成績查詢系統 (A)程式功能:PM3_2.java 數學老師利用一個二維陣列儲存某一班級學生的成績,score[][] = {{411101, 70}, {411102, 80}, {411103, 75}, {411104, 90}, {411105, 85}, {4111106, 65}, {411107, 83}, {411108, 78}}。請編寫程式可允許輸入學生學號,並輸出該學生的數學成績,期望操作介面如下:
(B)製作技巧提示: 利用輸入學號作為查詢關鍵,由陣列的起頭到結尾依序比較第 0 個欄位(score[i][0], i=0, 1, 2, …, score.length-1),如果相同則印出第 1 個欄位的內容(score[i][1],成績欄位);虛擬碼提示如下:
|
翻轉工作室:粘添壽
Java 程式設計(二) 含物件導向
翻轉電子書系列:
|