【黑馬程序員】-Java基礎語法(數組) 第四天

-------  android培訓java培訓java學習型技術博客、期待與您交流! ----------

知識點

數組定義:數組是用來存儲數據的集合,但是,通常我們會發現把數組看做一個存儲具有相同類型的變量集合會更有用。
數組聲明:使用(元素類型[] 數組引用變量)或(元素類型 數組引用變量[])聲明一個數組類型的變量。
不同於基本數據類型變量的聲明,聲明數組變量並不會給數組分配任何空間。數組變量不是基本數據類型變量。數組變量包含的是對數組的引用
數組創建:(new 數據類型[數組大小])。注意:只有創建數組後才能給數組元素賦值
數組中的每個元素都是使用語法(數組引用變量[下標])表示的。下標必須是一個整數或一個整數表達式。
創建數組後,它的大小就不能改變,使用(數組引用變量.length)可以得到數組的大小。由於數組的下標總是從0開始,所以,最後一個下標總是(數組引用變量.length -1)。如果試圖引用數組界外的元素,就會發生(下標越界)異常。
數組初始化語法(簡潔表達式):(元素類型[] 數組引用變量 = {元素1, 元素2, ... ,元素})。它將數組的聲明、創建和初始化合併爲一條語句。
數組參數傳遞:當數組參數傳遞給方法時,實際上傳遞的是數組的引用;更準確地說,被調用的方法可以修改調用者的原始數組的元素。



01)靜態初始化--常見問題。

class Arr{
public static void main(String[] args){
int[] arr = new int[3];//創建一個數組,裏面含有3個int類型的值。
System.out.println(int[3]);//運行結果提示:ArrayIndexOutOfBoundsException。操作數組時,訪問到了數組中不存在的下標。
arr = null;//使arr等於空,不在指向數組。
System.out.println(int[0]);//NullPointerException。下標越界異常。
}
}

02)數組的操作--(循環)

常見之一:獲取數組中的數據。通常用到for循環。
public class TArr {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
printArray(arr);
}

//定義功能,用來打印數組中的元素,並且用“,”隔開,最後一個元素不帶逗號。
public static void printArray(int[] arr){
for (int i = 0; i < arr.length; i++){
if (i != arr.length -1)//判斷是否爲最後一個元素
System.out.print(arr[i] + ", ");
else
System.out.println(arr[i]);
}
}
}
打印結果爲下圖所示:


03)獲取最大值、最小值


代碼:
public class MaxArray {
public static void main(String[] args) {
int[] arr = {-1, -31213, -432, 4, 6, 7, 3};
int max = getMax(arr);
System.out.println("Max is " + max);
int min = getMin(arr);
System.out.println("Max is " + min);
}
//獲取最大值。
public static int getMax(int[] arr){
int max = arr[0];
for (int i = 0; i < arr.length; i++){
if (arr[i] > max)
max = arr[i];
}
return max;//返回最大值。
}
//獲取最小值。
public static int getMin(int[] arr){
int min = arr[0];
for (int i = 0; i < arr.length; i++){
if (arr[i] < min)
min = arr[i];
}
return min;//返回最小值。
}
}
運行結果如下圖所示:


04)排序--選擇排序



public class ArrayTest {
	public static void main(String[] args) {
		int[] arr = {-1, -31213, -432, 4, 6, 7, 3};
		printArray(arr);//排序前。
		selectSort(arr);//排序
		printArray(arr);//排序後。
	}
	
	public static void selectSort(int[] arr){//排序
		for (int i = 0; i < arr.length -1; i++){
			for (int j = i + 1; j <arr.length; j++){
				if (arr[i] > arr[j]){
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
	}
	
	public static void printArray(int[] arr){//打印
		System.out.print("[");
		for (int i = 0; i < arr.length; i++){
			if (i != arr.length -1)//判斷是否爲最後一個元素
				System.out.print(arr[i] + ", ");
			else
				System.out.println(arr[i] + "]");
		}
	}
}

運行結果如下圖所示:


5)排序-冒泡排序


	public static void bubbleSort(int[] arr){//冒泡排序
		for (int i = 0; i < arr.length -1; i++){
			for (int j = 0; j < arr.length - i -1; j++){
				if (arr[j] > arr[j + 1]){
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
	}

運行結果如下圖所示:


06)排序--位置置換功能抽取


	public static void swp(int[] arr, int a, int b){
		int temp = arr[a];
		arr[a] = arr[b];
		arr[b] = temp;
	}

07)折半查找


public class ArrayTest1 {
	public static void main(String[] args) {
//		int[] arr = {3, 1, 5, 4, 33, 6, 7, 9};
//		int index = getIndex(arr, 3);
		int[] arr = {2, 3, 5, 6, 8, 9, 324, 545};
		int index_1 = halfSearch_2(arr, 8);
		System.out.println("Index_1 is " + index_1);
		int index_2 = halfSearch_2(arr, 9999999);
		System.out.println("Index_2 is " + index_2);
		int index_3 = halfSearch_2(arr, 3);
		System.out.println("Index_3 is " + index_3);
	}
	
	/*
	 * 折半查找可以提供效率,
	 */
	public static int halfSearch(int[] arr, int key){
		int min = 0, max = arr.length - 1, mid = (min + max) / 2;
		while (arr[mid] != key){
			if (key > arr[mid])
				min = mid + 1;
			else if (key < arr[mid])
				max = mid - 1;
			if (min > mid)
				return -1;
			mid = (min + max) / 2;//最後的min和max。
		}
		return mid;
	}
	
	/*
	 * 折半的第二種方式:只要min小於max,就折半。	
	 */
	public static int halfSearch_2(int[] arr, int key){
		int min = 0, max = arr.length - 1, mid;
		while (min <= max){
			mid = (min + max) >> 1;
			if (key > arr[mid])
				min = mid +1;
			else if (key < arr[mid])
				max = mid - 1;
			else
				return mid;//找到mid。
		}
		return -1;//防止出現不存在的元素。
	}
	
	//定義功能,獲取key第一個出現的位置。如果返回是-1,那麼代表該key在數組中不存在。
	public static int getIndex(int[] arr, int key){
		for (int i = 0; i < arr.length; i++){
			if (arr[i] == key)
				return i;
		}
		return -1;
	}
	
}

運行結果如下圖所示:


13)二維數組。


舉例:對二維數組中的所有元素進行求和運算。
public class Array2Test {
	public static void main(String[] args) {
//		int[] arr = new int[5];//一維數組。
//		int[][] arr = new int[8][8];//定義了名稱爲arr的二維數組。其中有8個一維數組,每個一維數組中有8個元素。
//		System.out.println(arr);//打印二維數組arr在堆內存中的位置。
		
		/*
		 * 對二維數組中的所有元素進行求和。
		 */
		int[][] arr = {{1, 1, 1, 1}, {2, 2, 2}, {3, 5, 3, 5, 3}, {5, 3, 5, 3}};//二維數組初始話的一種方式。
		int sum = 0;//初始話和sum。
		for (int i = 0; i < arr.length; i++){
			for (int j = 0; j < arr[i].length; j++)
				sum += arr[i][j];
		}
		System.out.println("The sum is " + sum);
	}
}

運行結果如下圖所示:



附言:我是Java新人,如有錯誤的地方請指出。
每天學習一點點,糾錯一點點,進步很大點。


-------  android培訓java培訓java學習型技術博客、期待與您交流! ----------




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