java基礎———第五天

1:數組的操作:
	(1)查找
		A:無序數組
		public static int getIndex(int[] arr,int key){
			for(int x=0; x<arr.length; x++){
				if(arr[x]==key){
					return x;
				}
			}
			//當循環結束,說明元素在數組中不存在
			return -1;
		}
			

		B:有序數組 二分查找
		public static int getIndex(int[] arr,int key){
			int min = 0;
			int max = arr.length - 1;
			int mid = (min+max)/2;
			
			//如果中間不等於我們要找的數,就通過循環進行不斷的查找
			while(arr[mid] != key){
				if(key > arr[mid]){
					min = mid + 1;//如果要找的數比中間值大,那麼小角標值改變
				}
				else if(key < arr[mid]){
					max = mid - 1;//如果要找的數比中間值小,那麼大角標值改變
				}

				//如果沒有怎麼辦?min max 
				if(min>max) {//如果min>max證明已經沒有可以折半的可能性了,說明要找的數不在這個數組
					return -1;
				}

				mid = (min+max)/2;
			}
			return mid;
		}
	(2)數組反轉
	要求:給一個數組讓其反轉,而並不是反過來遍歷
	public static void main(String[] args) {
		int[] arr = {3,2,1,5,4,6};//6,4,5,1,2,3;
		revArray(arr);
		System.out.println(print(arr));

	}
	
	//定義反轉的方法,經過分析我們發現需要對調的角標是兩個變化的變量
	//第一次讓頭角標和尾角標對調,然後讓頭角標自增,尾角標遞減再對調
	public static void revArray(int[] arr) {
			//int start = 0;
			//int end = arr.length-1;
			for (int start=0,end = arr.length-1;start<end ;start++, end--){
				//角標值每變化一次就對調一次
				int temp = arr[start];
				arr[start] = arr[end];
				arr[end] = temp;
		}
		
	}

	//把數組轉換成字符串輸出,因爲任何數據類型與字符串用+想連接都會產生新的字符串
	public static String print(int[] arr) {
		//定義一個初始字符串{1,2,3,4,5}
		String str = "[";
		for (int x=0;x <arr.length ;x++ ){
			//當x不等於最大角標值的時候,就讓字符串"["不斷的與數組中的元素用+號相連接,產生新的字符串
			if (x != arr.length-1){
				str = str +arr[x]+"," ;
			//當x=數組角標的最大值的時候,把末尾處的逗號改成"]";
			}else {
				str = str + arr[x]+ "]";
			}
			
		}
		return str;//程序運行結束把新的字符串返回給調用者
	}


	(3)一維數組的應用
	查表法
	
	public static void main(String[] args) {
		toHex(60);
	}

	public static void toHex(int num) {
		/*經過我們分析發現任何數與上15的結果肯定在0到15之間,這些元素是固定的
		那麼我們就有了這樣的一個想法,把所有的元素定義在一個表裏,然後我們通過角標去
		訪問這個對應的元素,請看下錶
		{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
		  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15 
		看過這個表後,我們發現,0-15角標對應的值就是十六進制裏面所有的元素,剛纔我們分析任何數與上15
		的結果就是在0到15之間,所以我們把這個結果當作角標值,去表中查找對應的元素即可
		*/

		//定義一個表,十六進制裏面的元素分別是0-15
		char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
		
		//定義一個數組,目的是把每次這個數與完15後的值,進行存儲
		char[] arr = new char[8];

		//定義一個指針,用於操作數組
		int pos = arr.length-1;
		if (num == 0){
			System.out.println('0');
			return;
		}
		//當num不等於0的時候我們就讓這個數不斷與上15,和不斷的想右移動四位
		while (num != 0){
			//每次的值需要存儲在不同角標的位置上,所以指針的指向需要改變
			
			//用一個變量記錄住這個數與上15的結果
			int temp = num & 15;//3
			//temp裏面記錄的結果肯定是在0到15之間,所以把temp當作定義表的角標值去找對應的元素
			//然後賦值到定義的數組中存儲
			arr[pos] = chs[temp];//'3'
			//上述操作是獲取一個int數的32個二進制位的最低的四位,爲了獲取下一個有效四位
			//讓這個數再向右移動四位
			pos--;
			num = num >>> 4;	
		}
		
		//把新的數組進行遍歷輸出,爲了可以從頭輸出,不要前面的那些空位,我們把第一次遍歷的位置定義的不是
		//零,而是pos指針所指向的位置
		for (int x=pos+1;x < arr.length ;x++ ){
			System.out.print(arr[x] + "");
		}
	}



		
2:二維數組
	(1)int[][] arr = new int[3][2];
		A:定義了名稱爲arr的二維數組
		B:二維數組中有3個一維數組
		C:每一個一維數組中有2個元素
		D:一維數組的名稱分別爲arr[0], arr[1], arr[2]
		arr:二維數組名
		arr[1]:二維數組中的第二個數組名
		arr[1][1]:二維數組中的第二個數組的第二個元素
		E:給第一個一維數組1腳標位賦值爲78寫法是:arr[0][1] = 78;
	(2)格式2:int[][] arr = new int[3][];
		A: 二維數組中有3個一維數組
		B: 每個一維數組都是默認初始化值null
		C: 可以對這個三個一維數組分別進行初始化
		  arr[0] = new int[3];
		  arr[1] = new int[1];
		  arr[2] = new int[2];
	(3)int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
		A:二維數組有3個一維數組。
		B:第一個一維數組有3個元素
		   第二個一維數組有2個元素
		   第三個一維數組有4個元素
	(4)二維數組的遍歷
		public static void printArray2(int[][] arr2){
			for(int i=0; i<arr2.length; i++){
				for(int j=0; j<arr2[i].length; j++){
					System.out.print(arr2[i][j]+" ");
				}
				System.out.println();
			}
		}
	(5)二維數組的應用
		求一年的銷售總額。
		public static void printArray2(int[][] arr2){
			int sum = 0;
			for(int i=0; i<arr2.length; i++){
				for(int j=0; j<arr2[i].length; j++){
					sum = sum + arr[i][j];
				}
				System.out.println("sum =" + sum);
			}
		}

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