Java開發筆記(二十)一維陣列的用法
之前介紹的各類變數都是單獨宣告的,倘若要求定義相同型別的一組變數,則需定義許多同類型的變數,顯然耗時耗力且不宜維護。為此,程式語言引入了陣列的概念,每個陣列都由一組相同型別的資料構成,對外有統一的陣列名稱,對內通過序號區分每個資料元素。
陣列型別由基本的變數型別擴充套件而來,在基本型別後面加上一對方括號,便形成了該型別對應的陣列類別。在Java程式碼中宣告陣列變數有兩種形式,一種是在變數名稱後面新增方括號,例如“int primeNumbers[]”;另一種是在型別後面新增方括號,例如“int[] primeNumbers”。兩種形式表達的涵義完全一致,都是宣告一個名叫primeNumbers的整型陣列,只是書寫習慣上存在區別。
宣告完陣列變數,還得給它分配儲存空間。一個數組有多長,包含幾個元素,這需要程式設計師事先予以指定。分配陣列空間的途徑有三種,說明如下:
1、利用語句“new 變數型別[陣列長度]”分配空間,比如希望陣列primeNumbers能夠容納四個元素,則可通過下面這行語句實現:
// 在方括號內填入數字,表示陣列有多大 primeNumbers = new int[4];
其中關鍵字new的意思是建立一塊儲存空間,方括號內部的數字表示該陣列的元素個數。
2、在分配儲存空間的時候立即對陣列進行初始化賦值,此時方括號中間不填數字,而在方括號後面新增花括號,並且花括號內部是以逗號分隔的一組數值。此時初始化賦值的程式碼如下所示:
// 方括號內留空,然後緊跟花括號,花括號內部是以逗號分隔的一組數值 primeNumbers = new int[]{2, 3, 5, 7};
3、上面的第二種寫法,之所以方括號內沒填數字,是因為花括號裡已經確定了具體的元素數量。既然程式能夠自動推導元素的數量,那麼從元素值也能推知該元素的變數型別,如此一來花括號前面的“new int[]”完全是冗餘的,於是就形成了以下的簡化寫法:
// 以下是分配陣列空間的第三種形式:賦值等號右邊直接跟著花括號 primeNumbers = {2, 3, 5, 7};
以上的賦值等號右邊直接跟著花括號,花括號裡面有四個整型數字,這便告訴編譯器:該陣列需要分配四個元素大小,並且每個元素都是整型數值。
現在陣列變數總算佔據一塊地盤,根據陣列名稱加上元素序號,即可訪問對應位置的陣列元素。獲取某個陣列元素的格式形如“陣列名稱[元素序號]”,譬如primeNumbers[0]表示獲取下標為0的陣列元素,Java程式碼裡的下標0對應日常生活中的第一個,因此primeNumbers[0]指的就是第一個陣列元素。這個陣列元素的用法跟普通變數一樣,既能對它賦值,也能把它打印出來。若要列印陣列內部的所有元素數值,則可通過迴圈語句實現,通過“陣列名稱.length”獲取該陣列的長度,然後依次列印長度範圍之內的所有元素。下面是宣告一個整型陣列,並對每個陣列元素賦值,最後遍歷列印各元素的完整程式碼例子:
// 以下是宣告陣列的第一種形式:“變數型別 陣列名稱[]” int primeNumbers[]; // 以下是分配陣列空間的第一種形式 // 在方括號內填入數字,表示陣列有多大 primeNumbers = new int[4]; // 陣列名稱後面的“[數字]”,就是陣列元素的下標,表示當前操作的是第幾個陣列元素 primeNumbers[0] = 2; // 給下標為0的陣列元素賦值,下標0對應日常生活中的第一個 primeNumbers[1] = 3; // 給下標為1的陣列元素賦值,下標0對應日常生活中的第二個 primeNumbers[2] = 5; // 給下標為2的陣列元素賦值,下標0對應日常生活中的第三個 primeNumbers[3] = 7; // 給下標為3的陣列元素賦值,下標0對應日常生活中的第四個 // 下面通過迴圈語句依次讀出陣列中的所有元素 // “陣列名稱.length”表示獲取該陣列的長度(陣列大小) for (int i=0; i<primeNumbers.length; i++) { // 列印下標為i的陣列元素 System.out.println("prime number = "+primeNumbers[i]); }
陣列的一個應用方向為數學上的數列運算,比如常見的斐波那契數列。話說數學家斐波那契養了一對兔子,他發現兔子出生兩個月後就有繁殖能力,並且一對兔子每個月能生產一對小兔子,那麼一年過後,總共有多少對兔子?這個兔子問題看起來得一個月一個月去數,第一個月只有一對小兔子;第二個月小兔子長成大兔子,但總共仍是一對兔子;第三個月大兔子生下一對小兔子,加起來有兩對兔子;第四個月大兔子又生下一對新的小兔子,上個月的小兔子長成大兔子,這下共有三對兔子……這麼一路數到第十二個月,把每個月的兔子數量情況整理為下面的一張表格。
上表所示的每月兔子對數就構成了斐波那契數列,它的前12個數字依次為:1、1、2、3、5、8、13、21、34、55、89、144。仔細觀察發現該數列有個規律,從第三個數字開始,每個數字都是前兩個數字之和,如3=2+1、5=3+2、8=5+3等等。於是大可不必絞盡腦汁去計算每個月的兔子生育情況,完全可以把這項工作交給計算機程式,讓Java程式碼幫助我們求解斐波那契數列。為此先宣告一個大小為12的整型陣列,接著迴圈遍歷該陣列,依次填入每個元素的數值。按照上述思路編寫的程式程式碼示例如下:
// 宣告一個兔子數量(多少對)的陣列變數 int rabbitNumbers[]; // 一年有12個月,故兔子陣列大小為12 rabbitNumbers = new int[12]; // 迴圈計算兔子陣列在每個月的兔子對數 for (int i=0; i<rabbitNumbers.length; i++) { if (i < 2) { // 數列的頭兩個元素都是1 rabbitNumbers[i] = 1; } else { // 從第三個元素開始,每個元素都等於它的前面兩個元素之和 rabbitNumbers[i] = rabbitNumbers[i-2] + rabbitNumbers[i-1]; } int month = i+1; // 列印當前的月份和兔子對數 System.out.println("第"+month+"個月,兔子對數="+rabbitNumbers[i]); }
最後執行這段整型陣列的運算程式碼,得到下列的日誌記錄,從中可見斐波那契數列的前12個數字。
第1個月,兔子對數=1 第2個月,兔子對數=1 第3個月,兔子對數=2 第4個月,兔子對數=3 第5個月,兔子對數=5 第6個月,兔子對數=8 第7個月,兔子對數=13 第8個月,兔子對數=21 第9個月,兔子對數=34 第10個月,兔子對數=55 第11個月,兔子對數=89 第12個月,兔子對數=144