Java 二維陣列 - 翻轉工作室

文章推薦指數: 80 %
投票人數:10人

既然陣列是由若干個相同資料型態的變數整合而成,變數的排列格式也延伸了不同的陣列格式。

如果所有變數排列成一行或一列,則稱之為『一維陣列』(如 · 將變數排列成『縱橫』 ...  Java 程式設計(二)  :第三章二維陣列      下一頁   第三章 二維陣列 3-1二維陣列 內容: 3-1-1二維陣列結構 3-1-2二維陣列宣告 3-1-3 範例研討:印出二維陣列內容 3-1-4 範例研討:將二維陣列內容加倍 3-1-5 自我挑戰:印出最高與最低成績者 3-1-6 自我挑戰:成績查詢系統 3-1-1二維陣列結構 既然陣列是由若干個相同資料型態的變數整合而成,變數的排列格式也延伸了不同的陣列格式。

如果所有變數排列成一行或一列,則稱之為『一維陣列』(如array[]);如果排列成平面形狀,則稱為『二維陣列』(如array[][]);如果是立體形狀,則為『三維陣列』(如array[][][]);如是四度空間型態,則是『四維陣列』(如array[][][][]),其中每一維都需要一個變數作為指標,索引其相對位置。

各種陣列型態都有其運用範圍,如沒有特殊情況的話,還是一維與二維陣列的應用最普遍,本書僅介紹到二維陣列,更多維數陣列的處理方式,也大致相同的。

將變數排列成『縱橫』的平面形狀,則稱之為『二維陣列』。

二維陣列需要兩個位置指標,如score[x][y]變數,前面指標(如x)是標示第幾行數(由0開始);第二個指標(如y),則標示第幾列數;如是4*3陣列共計有12個相同型態(int)變數的元素。

另外,陣列被宣告完成之後(如intscore[][]={..})。

以score[][]陣列為例,java利用score.length變數來表該陣列的行數。

又Java允許陣列中各行的列數目不一定要相同,以score[x].length表示該行(x)元素的數目(即是列數目)。

陣列內各元素與行列變數的表示方法,如圖3-1所示。

 圖3-1二維陣列的結構 3-1-2二維陣列宣告 陣列的宣告方法有兩種,一者先宣告陣列變數名稱與結構,當需要使用時再指定所需空間,其稱之為動態宣告。

另一者是宣告時就限定空間並給予出直,稱之為靜態宣告。

語法分別如下:   二維陣列宣告語法 範        例 動態宣告 Data_type Array_name[][]; Array_name= newData_type[num1][num2]; Data_type[][] name=newData_type[num1][num2]; intscore[]; score=new int[20][10]; int[][] score=newint[20][10]; 靜態宣告 Data_type Array_name[][]={…}; int score[][]={{1,2,3}, {4,5,6}, {7,8,9}, {10,11, 12}}; 第一行語法是宣告產生二維陣列,第二行則再給予初值。

如敘述句如: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}}內容並依照相對位置排列(平面形狀)。

期望操作介面如下: D:\Java2_book\chap3>javacEx3_1.java D:\Java2_book\chap3>javaEx3_1         1      2      3         4      5      6         7      8      8        10     11     12 (B)製作技巧研討: 吾人利用x與y變數作為陣列位置索引,x是行數指標,y為列數指標,則任何一元素可由score[x][y]表示。

如欲平面型態印出陣列內容,則需要二重迴圈敘述,外迴圈標示共計列印幾行(x=0,1,…,score.length);內迴圈索引每行的列數(y=0,1,2,…,score[x].length)。

(C)程式範例: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 //Ex3_1.java   publicclassEx3_1{    publicstaticvoidmain(Stringargs[]){        intscore[][]={{1,2,3},                   {4,5,6},                   {7,8,8},                   {10,11,12}};        intx;                   // 行指標 (外迴圈)        inty;                   // 列指標 (內迴圈)        for(x=0;xjavaEx3_2 原陣列內容:         1      2      3         4      5      6         7      8      8        10     11     12 加倍後陣列內容:         2      4      6         8     10     12        14     16     16        20     22     24 (B)製作技巧提示: 我們建構一個比較容易擴充的程式,將score[][]宣告成類別變數,使其允許類別內所有方法使用,又將列印陣列的功能製作成一個獨立的disp_arr()方法,程式架構如圖3-2所示。

圖3-2Ex3-2程式架構  (C)程式範例 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 //Ex3_2.java publicclass Ex3_2{  /*宣告類別變數 score[]*/  staticint score[][]={{1,2,3},                        {4,5,6},                        {7,8,8},                        {10,11,12}};  /* 主程式 main()*/  public staticvoidmain(Stringargs[]){       System.out.printf("原陣列內容:\n");                         disp_Arr();       for(intx=0;xjavacPM3_1.java D:\Java2_book\chap3>javaPM3_1 最高者411104 成績=90 最低者411106 成績=65 (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最高與最低成績搜尋 01 02 03 04 05 06 07 08 09 10 宣告成績儲存陣列並給初值(int score[][]={{411101,70},…}); 宣告最高成績陣列(int max[]={0,0}); 宣告最低成績陣列(int min[]={0,9999}); 搜尋最高與最低成績者:         for(inti=0;imax[1])                  max=score[i];              if(score[i][1]javaPM3_2 == 成績查詢系統== 請輸入學生學號=>4111120 沒有學號=4111120 的資料 D:\Java2_book\chap3>javaPM3_2 == 成績查詢系統== 請輸入學生學號=>411103 學號=411103, 成績=75 (B)製作技巧提示: 利用輸入學號作為查詢關鍵,由陣列的起頭到結尾依序比較第0個欄位(score[i][0],i=0,1,2,…,score.length-1),如果相同則印出第1個欄位的內容(score[i][1],成績欄位);虛擬碼提示如下: 01 02 03 04 05 06 07 08 09 10 11 12 13 宣告輸入物件(Scanner); 宣告成績儲存陣列並給初值(int score[][]={{411101,70},…}); 宣告旗號並給予初值(int flag=0); 讀入查詢學號(num); 搜尋查詢成績:        for(inti=0;i



請為這篇文章評分?