1. 程式人生 > 其它 >假期java自學-----陣列2

假期java自學-----陣列2

今天對java語言中陣列部分進行了深入學習:

Java中定義陣列的語法有兩種:
typearrayName[];
type[]arrayName;
type為Java中的任意資料型別,包括基本型別和組合型別,arrayName為陣列名,必須是一個合法的識別符號,[]指明該變數是一個數組型別變數。例如:
intdemoArray[];
int[]demoArray;
這兩種形式沒有區別,使用效果完全一樣。
與C、C++不同,Java在定義陣列時並不為陣列元素分配記憶體,因此[]中無需指定陣列元素的個數,即陣列長度。而且對於如上定義的一個數組是不能訪問它的任何元素的,我們必須要為它分配記憶體空間,這時要用到運算子new,其格式如下:
arrayName=newtype[arraySize];
其中,arraySize為陣列的長度,type為陣列的型別。如:
demoArray=newint[3];
為一個整型陣列分配3個int型整數所佔據的記憶體空間。
通常,可以在定義的同時分配空間,語法為:
typearrayName[]=newtype[arraySize];
例如:
intdemoArray[]=newint[3];
陣列的初始化
可以在宣告陣列的同時進行初始化(靜態初始化),也可以在宣告以後進行初始化(動態初始化)。例如:
//靜態初始化
//靜態初始化的同時就為陣列元素分配空間並賦值
intintArray[]={1,2,3,4};
StringstringArray[]={"微學苑","http://www.weixueyuan.net","一切程式語言都是紙老虎"};
//動態初始化
floatfloatArray[]=newfloat[3];
floatArray[0]=1.0f;
floatArray[1]=132.63f;
floatArray[2]=100F;
陣列引用
可以通過下標來引用陣列:
arrayName[index];
與C、C++不同,Java對陣列元素要進行越界檢查以保證安全性。
每個陣列都有一個length屬性來指明它的長度,例如intArray.length指明陣列intArray的長度。
【示例】寫一段程式碼,要求輸入任意5個整數,輸出它們的和。
importjava.util.*;
publicclassDemo{
publicstaticvoidmain(String[]args){
intintArray[]=newint[5];
longtotal=0;
intlen=intArray.length;
//給陣列元素賦值
System.out.print("請輸入"+len+"個整數,以空格為分隔:");
Scannersc=newScanner(System.in);
for(inti=0;i<len;i++){
intArray[i]=sc.nextInt();
}
//計算陣列元素的和
for(inti=0;i<len;i++){
total+=intArray[i];
}
System.out.println("所有陣列元素的和為:"+total);
}
}
執行結果:
請輸入5個整數,以空格為分隔:1020152550
所有陣列元素的和為:120
陣列的遍歷
實際開發中,經常需要遍歷陣列以獲取陣列中的每一個元素。最容易想到的方法是for迴圈,例如:
intarrayDemo[]={1,2,4,7,9,192,100};
for(inti=0,len=arrayDemo.length;i<len;i++){
System.out.println(arrayDemo[i]+",");
}
輸出結果:
1,2,4,7,9,192,100,
不過,Java提供了”增強版“的for迴圈,專門用來遍歷陣列,語法為:
for(arrayTypevarName:arrayName){
//SomeCode
}
arrayType為陣列型別(也是陣列元素的型別);varName是用來儲存當前元素的變數,每次迴圈它的值都會改變;arrayName為陣列名稱。
每迴圈一次,就會獲取陣列中下一個元素的值,儲存到varName變數,直到陣列結束。即,第一次迴圈varName的值為第0個元素,第二次迴圈為第1個元素......例如:
intarrayDemo[]={1,2,4,7,9,192,100};
for(intx:arrayDemo){
System.out.println(x+",");
}
輸出結果與上面相同。
這種增強版的for迴圈也被稱為”foreach迴圈“,它是普通for迴圈語句的特殊簡化版。所有的foreach迴圈都可以被改寫成for迴圈。
但是,如果你希望使用陣列的索引,那麼增強版的for迴圈無法做到。
二維陣列
二維陣列的宣告、初始化和引用與一維陣列相似:
intintArray[][]={{1,2},{2,3},{4,5}};
inta[][]=newint[2][3];
a[0][0]=12;
a[0][1]=34;
//......
a[1][2]=93;
Java語言中,由於把二維陣列看作是陣列的陣列,陣列空間不是連續分配的,所以不要求二維陣列每一維的大小相同。例如:
intintArray[][]={{1,2},{2,3},{3,4,5}};
inta[][]=newint[2][];
a[0]=newint[3];
a[1]=newint[5];
【示例】通過二維陣列計算兩個矩陣的乘積。
publicclassDemo{
publicstaticvoidmain(String[]args){
//第一個矩陣(動態初始化一個二維陣列)
inta[][]=newint[2][3];
//第二個矩陣(靜態初始化一個二維陣列)
intb[][]={{1,5,2,8},{5,9,10,-3},{2,7,-5,-18}};
//結果矩陣
intc[][]=newint[2][4];
//初始化第一個矩陣
for(inti=0;i<2;i++)
for(intj=0;j<3;j++)
a[i][j]=(i+1)*(j+2);
//計算矩陣乘積
for(inti=0;i<2;i++){
for(intj=0;j<4;j++){
c[i][j]=0;
for(intk=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];
}
}
//輸出結算結果
for(inti=0;i<2;i++){
for(intj=0;j<4;j++)
System.out.printf("%-5d",c[i][j]);
System.out.printlnwww.ymzxrj.com();
}
}
}
執行結果:
256514-65
5013028-130
靜態陣列一旦被宣告,它的容量就固定了,不容改變。所以在宣告陣列時,一定要考慮陣列的最大容量,防止容量不夠的現象。
如果想在執行程式時改變容量,就需要用到陣列列表(ArrayList,也稱動態陣列)或向量(Vector)。
正是由於靜態陣列容量固定的缺點,實際開發中使用頻率不高,被ArrayList或Vector代替,因為實際開發中經常需要向陣列中新增或刪除元素,而它的容量不好預估。