Java 二維陣列處理 - 翻轉工作室

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

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

如果所有變數排列成一行或一列,則稱之為『一維陣列』(如 array[]);如果排列成 ...  Java 程式設計(一)  :第 七章 陣列  上一頁    下一頁   7-3二維陣列處理 內容: 7-3-1二維陣列宣告 7-3-2 範例研討:印出二維陣列內容 7-3-3 自我挑戰:二維陣列內容加倍 7-3-4 範例研討:印出二維轉陣列 5-3-5 自我挑戰:列印直式唐詩 既然陣列是由若干個相同資料型態的變數整合而成,變數的排列格式也延伸了不同的陣列格式。

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

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

7-3-1二維陣列宣告 將變數排列成『縱橫』的平面形狀,則稱之為『二維陣列』,如圖7-3所示。

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

另外,陣列被宣告完成之後(如intscore[][]={..}),則score.length變數儲存該陣列的行數;又score[x].length儲存該行(x)元素的數目(即是列數目)。

宣告語法如下所示:  圖7-6二維陣列的結構 二維陣列宣告語法:  範例: Data_type Array_name[][]; Array_name= newData_type[num1][num2]; Data_type[][] name=newData_type[num1][num2]; intscore[]; score= 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].length=3 score[2][0]=7,score[2][1]=8,score[2][2]=9 =>score[2].length=3 score[3][0]=10,score[3][1]=11,score[3][2]=12 =>score[3].length=3 score.length=4 7-3-2範例研討:印出二維陣列內容 (A)程式功能:Ex7_4.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 //Ex7_2.java   publicclassEx7_2{    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所示。

(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;xjavaEx7_5 列印原陣列如下:         1      2      3         4      5      6         7      8      9   列印轉移陣列如下:         1      4      7         2      5      8         3      6      9 (B)製作技巧 我們只要將由陣列內容取出的次序轉換就可以,原陣列取出是score[i][j],轉移陣列取出是次序是score[j][i]。

當外迴圈i=0時,印出順序(j=0、1,、2)是score[0][0]=1、score[1][0]=4、score[2][0]=7,當i=1時,印出順序是score[0][1]=2、score[1][1]=5、score[2][1]=8,當i=2時,印出順序是score[0][2]=3、score[1][2]=6、score[2][2]=9。

(C)程式範例 01 02 03 04 05 06 07 08 09 10 11 12 public classEx7_5{         publicstaticvoidmain(Stringargs[]){                intscore[][]={{1,2,3},                                        {4,5,6},                          7,8,9}};                                                                System.out.printf("列印原陣列如下:\n");                for(inti=0;ijavaPM7_5 == 五言四句唐詩 列印 == 請輸入第 1句(五個字) =>山中相送罷 請輸入第 2句(五個字) =>日幕掩柒扉 請輸入第 3句(五個字) =>春草明年綠 請輸入第 4句(五個字) =>王孫歸不歸   == 橫式列印唐詩 == 山  中  相  送  罷 日  幕  掩  柒  扉 春  草  明  年  綠 王  孫  歸  不  歸   == 直式列印唐詩 == 山  日  春  王 中  幕  草  孫 相  掩  明  歸 送  柒  年  不 罷  扉  綠  歸 (B)製作技巧提示: 本系統需要二維陣列(poem[][];),將詩句裡每一個文字儲存於陣列的元素裡,才可分別以橫式或直式印出。

其中包含兩困難點,一者是如何將一串文字輸入,分別取出每一個文字,再存入陣列元素內;另一者是如何轉換陣列的行與列印出(直式列印)。

前者,吾人將一串文字直接讀入系統並存放某字串變數(data)內(利用Scanner物件),再將該變數宣告成掃瞄物件(Scanner物件)並指定分隔符號為沒有空格(useDelimiter("")),接著即可掃瞄取出每一個文字,再分別存入陣列內,如圖7-4所示。

圖7-8poem[][]陣列儲存內容 唐詩內所有文字都依序存入陣列後。

原先是依照一行接一行填入文字,如果一行接一行印出,則如同輸入格式一樣是橫式輸出;如果將行與列倒過來印,則是直式輸出。

虛擬碼提示如下: 虛擬碼提示如下: 導入相關套件(java.util.Scanner); 宣告唐詩陣列(String[][] poem=newString[4][5]); 讀入五言四句唐詩:        for(inti=0;i<4;i++){             System.out.printf("請輸入第 %d句(五個字) =>",i+1);             data=keyin.next();             Scanners=new Scanner(data).useDelimiter("");             for(intj=0;j<5;j++)      // 分別讀取詩句中每一個文字                poem[i][j]=s.next();        } 列印橫式唐詩:        for(inti=0;i<4;i++){          // 列印 4行            for(intj=0;j<5;j++)       // 每行 5個字                System.out.printf("%s ",poem[i][j]);            System.out.printf("\n");        } 列印直式唐詩:        for(intj=0;j<5;j++){           // 列印 5行            for(inti=0;i<4;i++)        // 每行 4個字                System.out.printf("%s ",poem[i][j]);            System.out.printf("\n");        } 翻轉工作室:粘添壽   Java程式設計(一)含程式邏輯 第一章認識Java 與程式開發 第二章 Java 程式架構與輸入/輸出 第三章 算術運算式 第四章順序與分歧流程 第五章重複性流程 第六章 方法與套件引用 第七章 陣列 7-1陣列結構 7-2專題研討:一維陣列 7-3二維陣列處理 7-4陣列線性搜尋 7-5泡沫排序法 7-6陣列資料結構 7-7專題研討:陣列運用     翻轉電子書系列: 資訊與網路安全技術 Java程式設計(一)含程式邏輯 Java 程式設計(二)含物件導向 資料庫程式設計-PHP+MySQL 資料庫系統概論(含邏輯設計) 網路規劃與管理技術 電腦網路與連結技術 TCP/IP協定與Internet網路 電子商務安全概論 Linux伺服器管理-CentOS Unix/Linux系統管理實務       



請為這篇文章評分?