數組

java數組定義和賦值

§5.1一維數組

一、一維數組的定義

type arrayName[];

其中類型(type)可以爲Java中任意的數據類型,包括簡單類型組合類型,數組名arrayName爲一個合法的標識符,[]指明該變量是一個數組類型變量。例如:

int intArray[];

聲明瞭一個整型數組,數組中的每個元素爲整型數據。與C、C++不同,Java在數組的定義中並不爲數組元素分配內存,因此[]中不用指出數組中元素個數,即數組長度,而且對於如上定義的一個數組是不能訪問它的任何元素的。我們必須爲它分配內存空間,這時要用到運算符new,其格式如下:

arrayName=new type[arraySize];

其中,arraySize指明數組的長度。如:

intArray=new int[3];

爲一個整型數組分配3個int型整數所佔據的內存空間。

通常,這兩部分可以合在一起,格式如下:

type arrayName=new type[arraySize];

例如:

int intArray=new int[3];

二、一維數組元素的引用

定義了一個數組,並用運算符new爲它分配了內存空間後,就可以引用數組中的每一個元素了。數組元素的引用方式爲:

arrayName[index]

其中:index爲數組下標,它可以爲整型常數或表達式。如a[3],b[i](i爲整型),c[6*I]等。下標 從0開始,一直到數組的長度減1。對於上面例子中的in-tArray數來說,它有3個元素,分別爲:

intArray[0],intArray[1],intArray[2]。注意:沒有intArray[3]。

另外,與C、C++中不同,Java對數組元素要進行越界檢查以保證安全性。同時,對於每個數組都有一個屬性length指明它的長度,例如:intArray.length指明數組intArray的長度。

例5.1

public class ArrayTest{
public static void main(String args[]){
int i;
int a[]=newint[5];
for(i=0;i<5;i++)
a[i]=i;
for(i=a.length-1;i>=0;i--)
System.out.println("a["+i+"]="+a[i]);
}
}

運行結果如下:

C:/>java ArrayTest

a[4]=4
a[3]=3
a[2]=2
a[1]=1
a[0]=0

該程序對數組中的每個元素賦值,然後按逆序輸出。

三、一維數組的初始化

對數組元素可以按照上述的例子進行賦值。也可以在定義數組的同時進行初始化。

例如:

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

用逗號(,)分隔數組的各個元素,系統自動爲數組分配一定空間。

與C中不同,這時Java不要求數組爲靜態(static)。

四、一維數組程序舉例:

例5.2Fibonacci數列

Fibonacci數列的定義爲:

F1=F2=1,Fn=Fn-1+Fn-2(n>=3)

public classFibonacci{
public static void main(String args[]){
int i;
int f[]=new int[10];
f[0]=f[1]=1;
for(i=2;i<10;i++)
f[i]=f[i-1]+f[i-2];
for(i=1;i<=10;i++)
System.out.println("F["+i+"]="+f[i-1]);
}
}

運行結果爲:

C:/>java Fibonacci

F[1]=1
F[2]=1
F[3]=2
F[4]=3
F[5]=5
F[6]=8
F[7]=13
F[8]=21
F[9]=34
F[10]=55

例5.3冒泡法排序(從小到大)

冒泡法排序對相鄰的兩個元素進行比較,並把小的元素交到前面。

public class BubbleSort{
public static void main(String args[]){
int i,j;
int intArray[]={30,1,-9,70,25};
int l=intArray.length;
for(i=0;i<l-1;i++)
for(j=i+1;j<l;j++)
if(intArray[i]>intArray[j]){
int t=intArray[i];
intArray[i]=intArray[j];
intArray[j]=t;
}
for(i=0;i<l;i++)
System.out.println(intArray[i]+"");
}
}

運行結果爲:

C:/>java BubbleSort
-9
1
25
30
70

§5.2多維數組

與C、C++一樣,Java中多維數組被看作數組的數組。例如二維數組爲一個特殊的一維數組,其每個元素又是一個一維數組。下面我們主要以二維數爲例來進行說明,高維的情況是類似的。

一、二維數組的定義

二維數組的定義方式爲:

type arrayName[][];

例如:

int intArray[][];

與一維數組一樣,這時對數組元素也沒有分配內存空間,同要使用運算符new來分配內存,然後纔可以訪問每個元素。

對高維數組來說,分配內存空間有下面幾種方法:

1直接爲每一維分配空間,如:

int a[][]=new int[2][3];

2從最高維開始,分別爲每一維分配空間,如:

int a[][]=new int[2][];
a[0]=new int[3];
a[1]=new int[3];

完成1中相同的功能。這一點與C、C++是不同的,在C、C++中必須一次指明每一維的長度。

二、二維數組元素的引用

對二維數組中每個元素,引用方式爲:arrayName[index1][index2] 其中index1、index2爲下標,可爲整型常數或表達式,如a[2][3]等,同樣,每一維的下標都從0開始。

三、二維數組的初始化

有兩種方式:

1直接對每個元素進行賦值。

2在定義數組的同時進行初始化。

如:int a[][]={{2,3},{1,5},{3,4}};

定義了一個3×2的數組,並對每個元素賦值。

四、二維數組舉例:

例5.4矩陣相乘

兩個矩陣Am×n、Bn×l相乘得到Cm×l,每個元素Cij= aik*bk (i=1..m,n=1..n)

public class MatrixMultiply{
public static void main(String args[]){
int i,j,k;
int a[][]=new int[2][3];
int b[][]={{1,5,2,8},{5,9,10,-3},{2,7,-5,-18}};
int c[][]=new int[2][4];
for(i=0;i<2;i++)
for(j=0;j<3;j++)
a[i][j]=(i+1)*(j+2);
for(i=0;i<2;i++){
for(j=0;j<4;j++){
c[i][j]=0;
for(k=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];
}
}
System.out.println("/n***MatrixA***");
for(i=0;i<2;i++){
for(j=0;j<3;j++)
System.out.print(a[i][j]+"");
System.out.println();
}
System.out.println("/n***MatrixB***");
for(i=0;i<3;i++){
for(j=0;j<4;j++)
System.out.print(b[i][j]+"");
System.out.println();
}
System.out.println("/n***MatrixC***");
for(i=0;i<2;i++){
for(j=0;j<4;j++)
System.out.print(c[i][j]+"");
System.out.println();
}
}
}

其結果爲:

C:/>java MatrixMultiply

for(j=0;j<4;j++)
System.out.print(c[i][j]+"");
System.out.println();
}
}
}

其結果爲:

C:/>java MatrixMultiply

***MatrixA***
2 3 4
4 6 8
***MatrixB***
1 5 2 8
5 9 10 -3
2 7 -5 -18
***MatrixC***
25 65 14 -65
50 130 28 -130


如果你學過線性代數,應該可以比較好地理解多維數組。
多維數組和矩陣結合緊密。

a[i][j]就是第i-1行的第j-1列的元素,因爲下標是從0開始的。
比如:
一個數組:1 2 3
4 5 6
a[0][0]=1 a[0][1]=2 a[0][2]=3
a[1][0]=3 a[1][1]=5 a[1][2]=6

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章