Java學習第五天

1 數組 1.1 數組的概念 1.1.1 數組基礎 數組(Array)是相同數據類型的數據的有序集合。java

數組描述的是相同類型的若干個數據,按照必定的前後次序排列組合而成。其中,每個數據稱做一個數組元素(item),每一個數組元素能夠經過一個下標/索引來(index)訪問它們.算法

數組是引用數據類型。數組

數組的三個特色 [1]數組長度是肯定。數組一旦申請完空間,長度不能發生變化,用length屬性訪問。 [2]數組的元素都是同一數據類型。 [3]數組是有序的 。每一個元素經過下標/索引標記,索引從0開始。 1.1.2 內存空間分類(C) 內存分爲兩類: 棧(stack)內存:基本數據類型分配在棧內存,棧內存空間不須要開發者回收,系統會自動回收。棧空間佔整個內存空間的比例較小。jvm

堆(heap)內存:引用數據類型分配在堆內存,堆內存必定要開發者經過new 來申請,開發者申請的內存使用完成後必定要回收。jvm中有專門的垃圾回收機制(gc)回收使用完的堆內存。堆空間佔整個內存空間的比例較大。code

1.2 數組的聲明 聲明數組有兩種方式 數據類型[] 變量 -–>推薦寫法排序

數據類型 變量[]索引

案例:聲明一個數組申請空間並賦值 public class Test01{ public static void main(String[] args){ // 聲明一個數組 // int arr[];內存

int a;
	
	// 【1】聲明數組變量
	int[] arr;
	
	// 【2】給數組變量分配空間
	// 給arr申請了5個連續的整形的int空間。
	arr = new int[5];
	
	// 【3】給每一個空間賦值
	arr[0] = 10;
	arr[1] = 20;
	arr[2] = 30;
	arr[3] = 40;
	arr[4] = 50;
	
	// 【4】訪問元素
	System.out.println(arr[0]);
	System.out.println(arr[1]);
	System.out.println(arr[2]);
	
	// System.out.println(arr[5]);
}

}開發

1.2.1 數組的內存空間it

1.2.2 數組聲明的其餘方式 標準的聲明和賦值方法過於複雜,能夠使用簡寫的方式 數據類型[] arr = new int[]{值1,值2,…} jvm根據後面值的個數申請空間並把值賦值到對於空間。

public class Test02{ public static void main(String[] args){

// 【1】數組的聲明方式

	int[] arr = new int[5];
	arr[0] = 10;
	arr[1] = 20;
	System.out.println(arr);
	
	// 【2】值聲明
	int[] arr2;
	arr2 = new int[]{10,20,30,40,50};
	
	// int[] arr2 = new int[]{10,20,30,40,50};
	System.out.println(arr2.length);
	
	System.out.println(arr2[0]);
	System.out.println(arr2[4]);
	
	
	// 【3】數組的字面量聲明
	int[] arr3 = {10,20,30,40};
	
	// 字面量聲明不支持分開賦值
	/*
	int[] arr3;
	arr3 = {10,20,30,40};
	*/
	System.out.println(arr3.length);
	
	System.out.println(arr3[0]);
	System.out.println(arr3[3]);
	
	
}

}

1.2.3 數組的遍歷 public class Test03{ public static void main(String[] args){

int[] arr = {10,20,30,40,50};
	// 0-4
	for(int i=0;i < arr.length;i++){
		System.out.println("arr[" + i + "]" + "=" + arr[i]);
	}
}

}

需求:從控制檯輸入5個學生的成績,並求平均分? import java.util.Scanner; public class Test04{ public static void main(String[] args){

float[] arr = new float[5];
	Scanner sc = new Scanner(System.in);
	
	float sum = 0.0f;
	for(int i=0;i<arr.length;i++){
		System.out.println("請輸入第"+(i+1)+"位學生成績:");
		arr[i] = sc.nextFloat();
		sum += arr[i];
	}
	float avg = sum / arr.length;
	System.out.println("平均分:"+avg);
}

}

1.3 數組的經常使用算法 1.3.1 插入算法 一個數組有序,添加一個元素後,數組依然有序。

public class Test07{ public static void main(String[] args){

// 一個有序的數組,向該數組中添加一個元素,數組依然有序。
	int[] arr = {1,3,7,9,12,20,0};
	int t = 0;
	
	// 【1】找位置
	int loc = -1; // 表示t應該添加到的位置
	for(int i = 0;i<arr.length-1;i++){
		if(arr[i] >= t){
			loc = i;
			break;
		}
	}
	
	System.out.println("loc = "+loc);
	
	if(loc < 0){ // 沒找到合適的位置
		arr[arr.length-1] = t;
	}else{
		// 【2】依次後移
		for(int j=arr.length-1;j>loc;j--){
			arr[j] = arr[j-1];
		}
		// 【3】添加插入的值
		arr[loc] = t;
	}
	
	// 驗證
	for(int i = 0;i<arr.length;i++){
		System.out.print(arr[i]+"\t");
	}
}

}

1.3.2 刪除算法 一個有序的數組,刪除一個元素後依然有序。

public class Test08{ public static void main(String[] args){

// 刪除算法
	int[] arr = {1,3,7,9,12,20};
	int t = 1;
	
	// 【1】找位置
	int loc = -1;
	for(int i=0;i<arr.length;i++){
		if(t == arr[i]){
			loc = i;
			break;
		}
	}
	
	// 【2】移動元素
	if(loc < 0){
		System.out.println(t+"在數組中不存在");
	}else{
		for(int j = loc;j<arr.length-1;j++){
			arr[j] = arr[j+1];
		}
		
		// 【3】最後一個元素置0
		arr[arr.length-1] = 0;
	}
	
	// 驗證
	for(int i = 0;i<arr.length;i++){
		System.out.print(arr[i]+"\t");
	}
	
}

}

1.3.3 冒泡排序算法

相關文章
相關標籤/搜索