官术网_书友最值得收藏!

3.3.1 一維數組

之前介紹的各類變量都是單獨聲明的,倘若要求定義相同類型的一組變量,則需定義許多同類型的變量,顯然耗時耗力且不易維護。為此,編程語言引入了數組的概念,每個數組都由一組相同類型的數據構成,對外有統一的數組名稱,對內通過序號區分每個數組元素。

數組類型由基本的變量類型擴展而來,在基本類型后面加上一對方括號便形成了該類型對應的數組類別。Java代碼聲明數組變量有兩種形式:一種是在變量名稱后面添加方括號,例如“int numbers[]”;另一種是在類型后面添加方括號,例如“int[] numbers”。兩種形式表達的含義完全一致,都是聲明一個名叫numbers的整型數組,只是書寫習慣上有所區別。

聲明完數組變量,還得給它分配存儲空間。一個數組有多長,包含幾個元素,這需要程序員事先予以指定。分配數組空間的途徑有3種,分別說明如下:

(1)利用語句“new變量類型[數組長度]”分配空間,比如希望數組numbers能夠容納4個元素,則可通過下面這行語句實現:

        // 在方括號內填入數字,表示數組有多大
        numbers=new int[4];

其中,關鍵字new的意思是創建一塊存儲空間,方括號內的數字表示該數組的元素個數。

(2)在分配存儲空間的時候立即對數組初始化賦值,此時方括號中間不填數字,而在方括號后面添加花括號,并且花括號內部是以逗號分隔的一組數值。此時初始化賦值的代碼如下:

        // 方括號內留空,然后緊跟花括號,花括號內部是以逗號分隔的一組數值
        numbers=new int[]{2, 3, 5, 7};

(3)上面的第二種寫法,之所以方括號內沒填數字,是因為花括號里已經確定了具體的元素數量。既然程序能夠自動推導元素的數量,那么從元素值也能推導該元素的變量類型。如此一來,花括號前面的“new int[]”完全是冗余的,于是就形成了以下的簡化寫法:

        // 以下是分配數組空間的第3種形式:賦值等號右邊直接跟著花括號
        numbers={2, 3, 5, 7};

以上的賦值等號右邊直接跟著花括號,花括號里面有4個整型數字,這便告訴編譯器:該數組需要分配4個元素,并且每個元素都是整型數值。

現在數組變量總算占據一塊地盤,根據數組名稱加上元素序號即可訪問對應位置的數組元素。獲取某個數組元素的格式形如“數組名稱[元素序號]”,譬如numbers[0]表示獲取下標為0的數組元素,Java代碼里的下標0對應日常生活中的第一個,因此numbers[0]指的就是第一個數組元素。這個數組元素的用法跟普通變量一樣,既能對它賦值,又能把它打印出來。若要打印數組內部的所有元素數值,則可通過循環語句實現,通過“數組名稱.length”獲取該數組的長度,然后依次打印長度范圍之內的所有元素。下面是聲明一個整型數組,并對每個數組元素賦值,最后遍歷打印各元素的完整代碼例子(完整代碼見本章源碼的src\com\control\array\OneDimensional.java):

        // 以下是聲明數組的第一種形式:“變量類型 數組名稱[]”
        int numbers[];
        // 以下是分配數組空間的第一種形式:在方括號內填入數字,表示數組有多大
        numbers=new int[4];
        // 數組名稱后面的“[數字]”就是數組元素的下標,表示當前操作的是第幾個數組元素
        numbers[0]=2;  // 給下標為0的數組元素賦值,下標0對應日常生活中的第一個
        numbers[1]=3;  // 給下標為1的數組元素賦值,下標1對應日常生活中的第二個
        numbers[2]=5;  // 給下標為2的數組元素賦值,下標2對應日常生活中的第三個
        numbers[3]=7;  // 給下標為3的數組元素賦值,下標3對應日常生活中的第四個
        // 通過循環語句依次讀出數組中的所有元素,“數組名稱.length”表示獲取該數組的長度
        for (int i=0; i<numbers.length; i++) {
            System.out.println("number="+numbers[i]);  // 打印下標為i的數組元素
        }

數組的一個應用方向為數學上的數列運算,比如常見的斐波那契數列。話說數學家斐波那契養了一對兔子,他發現兔子出生兩個月后就有繁殖能力,并且一對兔子每個月能生產一對小兔子,那么一年過后,總共有多少對兔子?這個兔子問題看起來得一個月一個月去數,第一個月只有一對小兔子;第二個月小兔子長成大兔子,但總共仍是一對兔子;第三個月大兔子生下一對小兔子,加起來有兩對兔子;第四個月大兔子又生下一對新的小兔子,上個月的小兔子長成大兔子,這下共有三對兔子……這么一路數到第十二個月,每個月的兔子數量情況整理如表3-3所示。

表3-3 兔子繁衍而來的斐波那契數列

表3-3所示的每月兔子的對數就構成了斐波那契數列,它的前12個數字依次為:1、1、2、3、5、8、13、21、34、55、89、144。仔細觀察發現該數列有一個規律,從第3個數字開始,每個數字都是前兩個數字之和,如3=2+1、5=3+2、8=5+3等。于是大可不必絞盡腦汁計算每個月的兔子生育情況,完全可以把這項工作交給計算機程序,讓Java代碼幫助我們求解斐波那契數列。為此先聲明一個大小為12的整型數組,接著循環遍歷該數組,依次填入每個元素的數值。按照上述思路編寫的程序代碼示例如下(完整代碼見本章源碼的src\com\control\Feibonaqi.java):

        int[] rabbitNumbers;  // 聲明一個兔子數量(多少對)的數組變量
        rabbitNumbers=new int[12];  // 一年有12個月,故兔子數組大小為12
        // 用循環計算兔子數組在每個月的兔子對數
        for (int i=0; i<rabbitNumbers.length; i++) {
            if (i < 2) {  // 數列的頭兩個元素都是1
                rabbitNumbers[i]=1;
            } else {  // 從第3個元素開始,每個元素都等于它的前面兩個元素之和
                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

主站蜘蛛池模板: 隆安县| 久治县| 达州市| 乌苏市| 台南市| 丰城市| 香港 | 汝阳县| 汉阴县| 昭通市| 革吉县| 济宁市| 钟祥市| 东乡县| 阳泉市| 丹凤县| 丰原市| 乐至县| 镇坪县| 阿图什市| 云安县| 金湖县| 靖西县| 普兰店市| 云阳县| 兰坪| 邹城市| 陇西县| 定南县| 丹棱县| 楚雄市| 扬州市| 祁门县| 乐陵市| 克拉玛依市| 顺平县| 绥棱县| 高要市| 呈贡县| 凤凰县| 明溪县|