天天看點

JAVA數組維數_跟我學java程式設計—了解數組結構的維數

前面介紹的數組結構都是多行單列資料結構,行數為數組的長度,列為數組中的元素。如上節圖9-2所示的Rate數組有四行一列,是以其數組長度為4,列元素分别為1.5、3.2、0.09、36.5。結構如下圖所示:

JAVA數組維數_跟我學java程式設計—了解數組結構的維數

圖 9-3 一維數組資料結構

多行單列的數組結構也可以用表格來表示,上圖的數組結構就可以用4行1列的表格來表示:

JAVA數組維數_跟我學java程式設計—了解數組結構的維數

類似于圖9-3的資料結構,我們稱之為一維數組,一維數組中隻有一列資料,資料可以通過下标擷取,下标為0的是1.5,下标為1的是3.2,下标為2的是0.09,下标為3的是36.5。

在用程式解決實際問題中,經常會遇到類似下面問題。例如,有50名學員,現在需要存儲每名學員的序号和兩門課程的成績。資料結構可用如下表格所示:

JAVA數組維數_跟我學java程式設計—了解數組結構的維數

表格結構為50行3列結構,要存儲類似上面表格結構的資料,用前面介紹的一維數組不能滿足存儲要求。因為一維數組隻能存儲1列資料,現在有3列資料。用什麼資料結構存儲上述表格的資料呢?試想一下,如果一維數組的每個元素本身也是一維數組,就可以存儲上述表格資料,資料結構如下圖所示:

JAVA數組維數_跟我學java程式設計—了解數組結構的維數

圖 9-4 二維數組資料結構

上圖所示的資料結構中,Students為數組的名稱,數組的長度為50,其數組元素本身也是一個長度為3的數組,該數組有三個元素,分别對應學員序号、國文成績、數學成績,其中下标0對應學員序号,下标1對應國文成績,下标2對應數學成績。這樣就可以根據第一個數組和第二個數組的下标通路一個學員的學号、國文、成績。例如:如果需要通路學員2的數學成績,可以通過Students[1][2]來通路學員2的數學成績,Students[1][2]是通路數組的文法,後面一節會有講述;再如,如果需要通路學員50的國文成績,可以通過Students[49][1]來通路學員50的國文成績。

類似于上面的資料結構,我們稱之為二維數組,二維數組本質上是以數組作為數組元素的數組,通路二維數組的元素時,需要同時給出第一個數組的小标和第二個數組的下标。

進一步考慮,在上述例子中,如果學員的國文和數學成績按學期來進行存儲,其資料結構可用如下表格所示:

JAVA數組維數_跟我學java程式設計—了解數組結構的維數

上面的表格結構為50行3列結構,但在國文和數學列單元中又嵌套了一個3行1列的子表,二維數組無法存儲上面的表格資料。如果把國文和數學列單元的資料也用一個數組表示,就可以滿足上述表格資料存儲要求了,其資料結構如下圖所示:

JAVA數組維數_跟我學java程式設計—了解數組結構的維數

圖 9-5 三維數組資料結構

上圖所示的資料結構中,Students為數組的名稱,數組的長度為n,其數組元素本身也是一個長度為3的數組,該數組有三個元素,分别對應學員序号、國文成績、數學成績,其中國文成績和數學成績元素本是也是一個數組,該數組長度為n,記錄了n個學期的考試成績。這樣就可以根據第一個數組、第二個數組的下标通路一個學員的學号,根據第一個數組、第二個數組和第三個數組的下标通路學員的學期成績。例如:如果需要通路第一個學員的學員學号,可以通過Students[0][0]來通路第一個學員的學員學号;通路第一個學員國文第一學期的成績,可以通過Students[0][1][0]來通路;通路第一個學員國文第n學期的成績,可以通過Students[0][1][n]來通路。

類似于上面存儲國文和數學學期成績的資料結構,我們稱之為三維數組,三維數組本質上是三層數組的嵌套,分為第一層數組、第二層數組、第三層數組。第一層數組的元素是第二層數組,第二層數組的元素是第三層數組。通路三維數組的元素時,需要同時給出三個數組的下标。

可以類推,數組的資料結構可有四維數組、甚至更多元數組,随着數組維數的增多,其資料存儲複雜度和計算複雜度也相應提升。在程式設計應用中,一般常用的為一維數組、二維數組和三維數組。

■知識點撥

對數組的通路一般是通過下标進行的。在一維數組中,數組的下标是由一個數字構成的,通過這一個數字組成的下标對數組的内容進行通路;在二維數組中,數組的下标是由兩個數字構成的,通過這兩個數字組成的下标對數組的内容進行通路;在三維數組中,數組的下标是由三個數字構成的,通過這三個數字組成的下标對數組的内容進行通路。

■ 思考與練習

如果要編寫一個簡單的日常生活記賬程式,要求記錄每位家庭成員的消費記錄,消費記錄包括禮物支出、購物支出、交通支出。

請用二維數組描述該程式的存儲結構,二維數組的結構可以通過表格給出,也可以按照教材中圖9-4二維資料結構圖給出。