- Java程序設(shè)計基礎(chǔ)(第6版)
- 陳國君主編
- 1936字
- 2019-07-01 10:11:08
5.4 多維數(shù)組
雖然一維數(shù)組可以處理一般簡單的數(shù)據(jù),但是在實際的應用中仍顯不足,所以Java語言提供了多維數(shù)組,但在Java語言中并沒有真正的多維數(shù)組。所謂多維數(shù)組,就是數(shù)組元素也是數(shù)組的數(shù)組。
5.4.1 二維數(shù)組
二維數(shù)組的聲明方式與一維數(shù)組類似,內(nèi)存的分配也一樣是用new運算符。其聲明與分配內(nèi)存的格式如下所示:
數(shù)據(jù)類型[][]數(shù)組名; 數(shù)組名=new數(shù)據(jù)類型[行數(shù)][列數(shù)];
二維數(shù)組在分配內(nèi)存時,要告訴編譯器二維數(shù)組行與列的個數(shù)。因此在上面格式中,“行數(shù)”是告訴編譯器所聲明的數(shù)組有多少行,“列數(shù)”則是聲明每行中有多少列。例如:
int[][]a; //聲明二維整型數(shù)組a a=new int[3][4]; //分配一塊內(nèi)存空間,供3行4列的整型數(shù)組a使用
同樣地,也可以用較為簡潔的方式來聲明數(shù)組,其格式如下:
數(shù)據(jù)類型[][]數(shù)組名=new數(shù)據(jù)類型[行數(shù)][列數(shù)];
以該種方式聲明的數(shù)組,在聲明的同時,就分配一塊內(nèi)存空間,供該數(shù)組使用。如
int[][]a=new int[3][4];
雖然在應用上很像C語言中的多維數(shù)組,但還是有區(qū)別的,在C語言中定義一個二維數(shù)組,必須是一個m×n的矩形,如圖5.4所示。Java語言的二維數(shù)組不一定是規(guī)則的矩形,如圖5.5所示。

圖5.4 C語言中二維數(shù)組必須是矩形

圖5.5 Java語言中的二維數(shù)組不一定是矩形
如,定義一個如下的數(shù)組:
int[][]x=nex int[];
它表示定義了一個數(shù)組引用變量x,第一個元素為x[0],第n個元素變量為x[n—1]。x中從x[0]到x[n—1]的每個元素變量正好又是一個整數(shù)類型的數(shù)組引用變量。需要注意的是,這里只是要求每個元素都是一個數(shù)組引用變量,并沒有要求它們所引用數(shù)組的長度是多少,也就是每個引用數(shù)組的長度可以不一樣。例如:
int[][]x; x=new int[3][];
這兩行代碼表示數(shù)組x有三個元素,每個元素都是int[]類型的一維數(shù)組。該語句相當于定義了三個數(shù)組引用變量,分別是int[]x[0],int[]x[1]和int[]x[2],完全可以把x[0]、x[1]和x[2]當成普通變量名來理解。
由于x[0]、x[1]和x[2]都是數(shù)組引用變量,因此,必須對它們賦值,指向真正的數(shù)組對象,才可以引用這些數(shù)組中的元素。例如:
x[0]=new int[3]; x[1]=new int[2];
由此可以看出,x[0]和x[1]的長度可以是不一樣的,數(shù)組對象中也可以只有一個元素。程序運行到這之后的內(nèi)存分配情況如圖5.6所示。

圖5.6 Java中的二維數(shù)組可以看成是多個一維數(shù)組
x[0]中的第二個元素用x[0][1]來表示,如果要將整數(shù)100賦給x[0]中的第二個元素,寫法如下:
x[0][1]=100;
如果數(shù)組對象正好是一個m×n形式的規(guī)則矩陣,可不必向上面代碼一樣,先創(chuàng)建高維的數(shù)組對象后,再逐一創(chuàng)建低維的數(shù)組對象。完全可以用一條語句在創(chuàng)建高維數(shù)組對象的同時,創(chuàng)建所有的低維數(shù)組對象。例如:
int[][]x=new int[2][3];
該語句表示創(chuàng)建了一個2×3形式的二維數(shù)組,其內(nèi)存布局如圖5.7所示。

圖5.7 規(guī)則的二維數(shù)組內(nèi)存分配
在二維數(shù)組中,若要取得二維數(shù)組的行數(shù),只要在數(shù)組名后加上.length屬性即可;若要取得數(shù)組中某行元素的個數(shù),則須在數(shù)組名后加上該行的下標,再加上.length。例如:
x.length; //計算數(shù)組x的行數(shù) x[0].length; //計算數(shù)組x的第1行元素的個數(shù) x[2].length; //計算數(shù)組x的第3行元素的個數(shù)
注意:與一維數(shù)組相同,用new運算符來為數(shù)組申請內(nèi)存空間時,很容易在數(shù)組各維數(shù)的指定中出現(xiàn)錯誤,二維數(shù)組要求必須指定高層維數(shù)。例如,下面是正確的申請方式:

下面是錯誤的申請方式:

如果想直接在聲明二維數(shù)組時就給數(shù)組賦初值,可以利用花括號實現(xiàn),只要在數(shù)組的聲明格式后面再加上初值的賦值即可。其格式如下:

同樣需要注意的是,用戶并不需要定義數(shù)組的長度,因此在數(shù)據(jù)類型后面的方括號里并不必填寫任何的內(nèi)容。此外,在花括號內(nèi)還有幾組花括號,每組花括號內(nèi)的初值會依次賦值給數(shù)組的第1,2,…,n+1行元素。例如:

該語句中聲明了一個整型數(shù)組a,該數(shù)組有2行4列共8個元素,花括號里的兩組初值會分別依次指定給各行里的元素存放,a[0][0]為11,a[0][1]為22,…,a[1][3]為99。
注意:與一維數(shù)組一樣,在聲明多維數(shù)組并初始化時不能指定其長度,否則出錯。如“int[2][3]b={{1,2,3},{4,5,6}};”語句在編譯時將出錯。
【例5.4】 計算并輸出楊輝三角形。

該程序的運行結(jié)果為:

該程序的第8行聲明了一個7行的二維數(shù)組iaYong,每行的列數(shù)由第10、11行的for循環(huán)來定義;第13~19行的for循環(huán)用于計算楊輝三角形并存入數(shù)組iaYong的相應元素中,其中的第15、18行分別是將第i行的第一個元素和最后一個元素置1;第16行定義的內(nèi)層for循環(huán)用于計算第i行的其他元素,其計算方法是第17行的循環(huán)體;第20~25行利用foreach循環(huán)將楊輝三角形輸出。
5.4.2 三維以上的多維數(shù)組
通過對二維數(shù)組的介紹,不難發(fā)現(xiàn),要想提高數(shù)組的維數(shù),只要在聲明數(shù)組的時候?qū)⑾聵伺c中括號再加一組即可,所以三維數(shù)組的聲明為“int[][][]a;”,而四維數(shù)組為“int[][][][]a;”,依次類推。
使用多維數(shù)組時,輸入輸出的方式和一、二維數(shù)組相同,但是每多一維,嵌套循環(huán)的層數(shù)就必須多一層,所以維數(shù)越高的數(shù)組其復雜度也就越高。
【例5.5】 聲明三維數(shù)組并賦初值,然后輸出該數(shù)組的各元素,并計算各元素之和。

程序運行時的結(jié)果如下:
a[0][0][0]=1 a[0][0][1]=2 a[0][1][0]=3 a[0][1][1]=4 a[1][0][0]=5 a[1][0][1]=6 a[1][1][0]=7 a[1][1][1]=8 sum=36
該程序利用三層循環(huán)來輸出三維數(shù)組的各元素并計算各元素之和。
- The Supervised Learning Workshop
- Building Modern Web Applications Using Angular
- 編程卓越之道(卷3):軟件工程化
- Java:Data Science Made Easy
- 重學Java設(shè)計模式
- C程序設(shè)計案例教程
- 量化金融R語言高級教程
- MATLAB 2020從入門到精通
- Citrix XenServer企業(yè)運維實戰(zhàn)
- Android傳感器開發(fā)與智能設(shè)備案例實戰(zhàn)
- 深度學習原理與PyTorch實戰(zhàn)(第2版)
- Fastdata Processing with Spark
- Python預測之美:數(shù)據(jù)分析與算法實戰(zhàn)(雙色)
- Mastering PowerCLI
- Python數(shù)據(jù)科學實踐指南