【java】陣列及相關練習
阿新 • • 發佈:2018-12-28
一、一維陣列
1、動態初始化宣告並初始化陣列:
資料型別[ ] 陣列名稱 = new 資料型別 [長度] ;
如:int [ ] intArray = new int [ 3 ];
分步進行資料初始化:
int[ ] intArray = null;
intArray = new int [ 3 ];
陣列開闢空間後,可進行如下操作:
- 陣列的訪問通過索引來完成。同C
- 陣列每個元素都是該資料型別的預設值。
- 陣列的內容操作往往採用迴圈來進行。
- 動態取得陣列長度的方法:陣列名稱.length;
注:變數在棧上存放,資料在堆上存放。(除基本資料型別外)
2、引用傳遞
引用傳遞空間:同一塊堆記憶體空間可以被不同的棧記憶體所指向。
多個棧記憶體指向相同的堆記憶體
如:
int[] x = null;
int[] tmp = mull;
x = new int[3];
tmp = x; //引用傳遞
注:如果要發生引用傳遞,不要出現[ ]
記憶體使用空間如下:
如果x和temp同時為null了,則說明堆記憶體的這段空間不使用了,系統會認為這段空間是垃圾空間,自動回收了。
3、陣列靜態初始化
兩種格式:
1. 資料型別 陣列名稱 = {值,值,....} 2. 資料型別[] 陣列名稱 = new 資料型別[] {值,值,....}
注:相關型別、型別轉換(小可轉大,大不可轉小)。
4、匿名陣列
如:System.out.println(new char[]{'A','B'});
因為println(Object o); //型別為物件
二、二維陣列
1、動態初始化
資料型別[][] 物件陣列 = new 資料型別[行個數][列個數] ;
如:int[][] intArray= new int[2][2];
2、靜態初始化
資料型別[][] 物件陣列 = new 資料型別[][]{{值,值,..},{值,值,..},..} ; 如:int[][] intArray = new int[][]{{1,2,3},{4,5,6,7}}
注:沒有用的空間不會被填充
檢視二維陣列行數:
intArray.lenth
檢視二維陣列這一行有多少個元素
intArray[i].lenth
三、陣列與方法互操作
方法接收陣列
方法接收的是陣列的地址值
方法返回陣列
方法返回一個新陣列
四、物件陣列
動態初始化
類名稱[] 物件陣列名稱 = new 類名稱[長度] ;
靜態初始化
類名稱[] 物件陣列名稱 = new 類名稱[長度] {new 類名稱,new 類名稱,new 類名稱};
陣列練習
1、計算陣列中最大值
//1.計算陣列中最大值
public static int arrayMaxElement(int[] data){
int i = 0 ;
int max = data[0];
for(i=0; i<data.length; i++){
if(data[i]>max){
max = data[i];
}
}
return max;
}
2、計算陣列中最小值
//2.計算陣列中最小值
public static int arrayMinElement(int[] data){
int i = 0;
int min = data[0];
for(i=0; i<data.length; i++){
if(data[i]<min){
min = data[i];
}
}
return min;
}
3、計算陣列值之和
//3.計算陣列值之和
public static int arrayElementSum(int[] data){
int i = 0;
int sum = 0;
for(i=0;i<data.length;i++){
sum = sum + data[i];
}
return sum;
}
4、陣列拼接
//4.陣列拼接
public static int[] arrayJoin(int[] a, int[] b){
int[] c = new int[a.length+b.length];
int i = 0;
int j = 0;
for(i=0; i<a.length; i++){
c[i] = a[i];
}
for(i=a.length,j=0; i<a.length+b.length; i++,j++){
c[i] = b[j];
}
return c;
}
5、陣列擷取
//5.陣列擷取
//[start, end)
public static int[] arraySub(int[] data, int start , int end){
if((start<0)||(end>0)||(end-start>data.length)||(start>end)){
System.out.println("擷取失敗");
return data;
}
int[] b = new int[end-start+1];
int i = 0;
for(i=0; start<=end; i++){
b[i] = data[start++];
}
return b;
}
6、陣列列印
//6.陣列列印
public static void printArray(int[] data){
int i = 0;
for(i=0; i<data.length; i++){
System.out.print(data[i]+" ");
}
System.out.println();
}
7、陣列反轉
//7.陣列反轉
// 比如:[1,2,3,4] => [4,3,2,1]
public static void printReversal(int[] data){
int left = 0;
int right = data.length-1;
int tmp = 0;
while(left<right){
tmp = data[left];
data[left] = data[right];
data[right] = tmp;
left++;
right--;
}
printArray(data);
}