1. 程式人生 > >Java陣列的定義和使用

Java陣列的定義和使用

如果希望儲存一組有相同型別的資料,可以使用陣列。

陣列的定義和記憶體分配

Java 中定義陣列的語法有兩種:    type arrayName[];    type[] arrayName;type 為Java中的任意資料型別,包括基本型別和組合型別,arrayName為陣列名,必須是一個合法的識別符號,[ ] 指明該變數是一個數組型別變數。例如:

1. int demoArray[];

2. int[] demoArray;

這兩種形式沒有區別,使用效果完全一樣,讀者可根據自己的程式設計習慣選擇。C、C++不同,Java在定義陣列時並不為陣列元素分配記憶體,因此[ ]中無需指定陣列元素的個數,即陣列長度。而且對於如上定義的一個數組是不能訪問它的任何元素的,我們必須要為它分配記憶體空間,這時要用到運算子new,其格式如下:

    arrayName=new type[arraySize];其中,arraySize 為陣列的長度,type 為陣列的型別。如:

1. demoArray=newint[3];

為一個整型陣列分配3個int 型整數所佔據的記憶體空間。通常,你可以在定義的同時分配空間,語法為:    type arrayName[] = new type[arraySize];例如:

複製純文字新視窗

1. int demoArray[]=newint[3];

陣列的初始化

你可以在宣告陣列的同時進行初始化(靜態初始化),也可以在宣告以後進行初始化(動態初始化)。例如:

1. // 靜態初始化

2. // 靜態初始化的同時就為陣列元素分配空間並賦值

3. int intArray[]={1,2,3,4};

4. String stringArray[]={"微學苑","http://www.weixueyuan.net","一切程式語言都是紙老虎"};

5. 

6. // 動態初始化

7. float floatArray[]=newfloat[3];

8. floatArray[0]=1.0f;

9. floatArray[1]=132.63f;

10. floatArray[2]= 100F;

陣列引用

可以通過下標來引用陣列:    arrayName[index];C、C++不同,Java對陣列元素要進行越界檢查以保證安全性。每個陣列都有一個length屬性來指明它的長度,例如 intArray.length 指明陣列 intArray 的長度。

【示例】寫一段程式碼,要求輸入任意5個整數,輸出它們的和。

1. import java.util.*;

2. publicclass Demo {

3. publicstaticvoidmain(String[] args){

4. int intArray[]=newint[5];

5. long total =0;

6. int len = intArray.length;

7. 

8. // 給陣列元素賦值

9.         System.out.print("請輸入"+ len +"個整數,以空格為分隔:");

10.         Scanner sc =newScanner(System.in);

11. for(int i=0; i<len; i++){

12.             intArray[i]= sc.nextInt();

13. }

14. 

15. // 計算陣列元素的和

16. for(int i=0; i<len; i++){

17.             total += intArray[i];

18. }

19. 

20.         System.out.println("所有陣列元素的和為:"+ total);

21. }

22. }

執行結果:請輸入5個整數,以空格為分隔:10 20 15 25 50所有陣列元素的和為:120

陣列的遍歷

實際開發中,經常需要遍歷陣列以獲取陣列中的每一個元素。最容易想到的方法是for迴圈,例如:

1. int arrayDemo[]={1,2,4,7,9,192,100};

2. for(int i=0,len=arrayDemo.length; i<len; i++){

3.     System.out.println(arrayDemo[i]+", ");

4. }

輸出結果:1, 2, 4, 7, 9, 192, 100,不過,Java提供了”增強版“的for迴圈,專門用來遍歷陣列,語法為:

1. for( arrayType varName: arrayName ){

2. // Some Code

3. }

arrayType 為陣列型別(也是陣列元素的型別);varName 是用來儲存當前元素的變數,每次迴圈它的值都會改變;arrayName 為陣列名稱。每迴圈一次,就會獲取陣列中下一個元素的值,儲存到 varName 變數,直到陣列結束。即,第一次迴圈 varName 的值為第0個元素,第二次迴圈為第1個元素......例如:

1. int arrayDemo[]={1,2,4,7,9,192,100};

2. for(int x: arrayDemo){

3.     System.out.println(+", ");

4. }

輸出結果與上面相同。這種增強版的for迴圈也被稱為”foreach迴圈“,它是普通for迴圈語句的特殊簡化版。所有的foreach迴圈都可以被改寫成for迴圈。但是,如果你希望使用陣列的索引,那麼增強版的 for 迴圈無法做到。

二維陣列

二維陣列的宣告、初始化和引用與一維陣列相似:

1. int intArray[][]={{1,2},{2,3},{4,5}};

2. int a[][]=newint[2][3];

3. a[0][0]=12;

4. a[0][1]=34;

5. // ......

6. a[1][2]=93;

Java語言中,由於把二維陣列看作是陣列的陣列,陣列空間不是連續分配的,所以不要求二維陣列每一維的大小相同。例如:

1. int intArray[][]={{1,2},{2,3},{3,4,5}};

2. int a[][]=newint[2][];

3. a[0]=newint[3];

4. a[1]=newint[5];

【示例】通過二維陣列計算兩個矩陣的乘積。

1. publicclass Demo {

2. publicstaticvoidmain(String[] args){

3. // 第一個矩陣(動態初始化一個二維陣列)

4. int a[][]=newint[2][3];

5. // 第二個矩陣(靜態初始化一個二維陣列)

6. int b[][]={{1,5,2,8},{5,9,10,-3},{2,7,-5,-18}};

7. // 結果矩陣

8. int c[][]=newint[2][4];

9. 

10. // 初始化第一個矩陣

11. for(int i=0; i<2; i++)

12. for(int j=0; j<3;j++)

13.                 a[i][j]=(i+1)*(j+2);

14. 

15. // 計算矩陣乘積

16. for(int i=0; i<2; i++){

17. for(int j=0; j<4; j++){

18.                 c[i][j]=0;

19. for(int k=0; k<3; k++)

20.                     c[i][j]+= a[i][k]* b[k][j];

21. }

22. }

23. 

24. // 輸出結算結果

25. for(int i=0; i<2; i++){

26. for(int j=0; j<4; j++)

27.                 System.out.printf("%-5d", c[i][j]);

28.             System.out.println();

29. }

30. }

31. }

執行結果:25   65   14   -65 50   130  28   -130幾點說明:

· 上面講的是靜態陣列。靜態陣列一旦被宣告,它的容量就固定了,不容改變。所以在宣告陣列時,一定要考慮陣列的最大容量,防止容量不夠的現象。

· 如果想在執行程式時改變容量,就需要用到陣列列表(ArrayList,也稱動態陣列)或向量(Vector)。

· 正是由於靜態陣列容量固定的缺點,實際開發中使用頻率不高,被 ArrayList 或 Vector 代替,因為實際開發中經常需要向陣列中新增或刪除元素,而它的容量不好預估。

 Java學習視訊:http://www.makeru.com.cn/course/1427.html?v=java_v1.1

Java學習交流群:587131012