黑马程序员——第四天(Java数组)

---------------------- android培训java培训、期待与您交流! ----------------------

一.数组(静态初始化-常见问题)

1.int [] arr = new int[]{3,4,6,2,5};//创建一个数组实体,并给数组的每一个位置上都添加了具体的元素

2.int [] arr = {3,6,3,6,7};//

ArrayIndexOutofBoundsException  操作数组时,访问到了数组中不存在的角标

NullPointerException 空指针异常   当引用没有任何指向  值为空的情况  该引用还在用于操作实体导致的


二.数组(常见操作-遍历)

	//定义功能:用于打印数组中的元素,元素间用逗号隔开
	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]+"]");
			}
		}
	}

三.数组(常见操作-获取最值)

	//获取最大值
	public static int getMax(int[] arr){
		int max = arr[0];
		/*for (int i = 0; i < arr.length; i++) {
			max = (max>arr[i])?max:arr[i];
		}
		return max;*/
		for (int i : arr) {
			max = (max > i)? max : i ;
		}
		return max ;
	}
	//获取最小值
	public static int getMin(int[] arr){
		int min = 0;
		for (int i = 0; i < arr.length; i++) {
			if(arr[i]<arr[min]){
				min = i ;
			}
		}
		return arr[min];
	}



四.数组(排序-选择排序)

//选择排序
	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 bubbleSort(int[] arr){
		for (int i = 0; i < arr.length-1; i++) {
			for (int j = 0; j < arr.length-i-1; j++) {//-i 让每一次比较的元素减少  ; -1  避免角标越界
				if (arr[j]>arr[j+1]) {
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
	}
Arrays.sort(arr);

六.数组(排序-位置置换功能抽取)

	public static void awap(int[] arr, int i, int j) {
		int temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}

七.数组(折半查找)

	public static int halfSearch(int[] arr , int key){
		int min = 0 , max = arr.length - 1 , mid = (min + max)/2 ;
		while(key!=arr[mid]){
			if(key > arr[mid])
				min = mid + 1 ;
			else if(key < arr[mid])
				max = mid - 1;
			if(min > max)return-1;
			mid = (min+max)/2;
		}
		return mid ;
	}

	public static int halfSearch_2(int[] arr , int key){
		int min = 0 , max = arr.length - 1 , mid /*= (min + max)/2*/ ;
		while(min <= max){
			mid = (min + max)/2 ;
			if(key > arr[mid]) min = mid + 1 ;
			else if (key < arr[mid]) max = mid - 1 ; 
			else return mid;
		}
		return -1 ;
	}
折半查找
可以提高效率
但是必须保证数组是有序的 

八.数组(十进制-二进制)

进制转换

	/*
		十进制 --->  二进制
	*/
	public static void toBin(int num){
		StringBuilder sb = new StringBuilder();
		while(num > 0 ){
			sb.append(num%2);
			num /= 2 ; 
		}
		System.out.println(sb.reverse());
	}
九.数组(十进制-十六进制)
	/*	
		十进制 --->  十六进制
	*/
	public static void toHex(int num){
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < 8; i++) {
			int temp = num & 15;
			if(temp > 9)
//				System.out.println((char)(temp-10+'A'));
				sb.append((char)(temp - 10 + 'A'));
			else
//				System.out.println(temp);
				sb.append(temp);
			num = num >>> 4;
		}
		System.out.println(sb.reverse());
	}

十.数组(查表法:十进制-十六进制)

	/*
		查表法
		将所有的元素临时存储起来,都建立对应关系,
		每一次&15后的值作为索引去查建立好的表,就可以找到对应的元素
		这样比 -10+‘A’ 简单的多
		这个表怎么建立呢?
		可以通过数组的形式来定义
		
		十六进制中的元素
		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//角标 
		
		
	*/
	
	public static void toHex_2(int num){
		char[] chs = {'0','1','2','3',
			      '4','5','6','7',
			      '8','9','A','B',
			      'C','D','E','F'};
		//定义一个临时容器。
		char[] arr = new char[8];//'\u0000'一个空位  相当于空格
		int pos = arr.length ;//定义指针 
		while(num !=0 ) {
			int temp = num&15;
			arr[--pos] = chs[temp];
			
			num = num >>> 4 ;
		}
		//遍历存储的arr数组
		for (int i = pos; i < arr.length ; i++) {
			System.out.print(arr[i]+",");
		}
	}

十一.数组(查表法:十进制-二进制)

public static void toBin(int num){
		//定义二进制的表
		char[] chs = {'0','1'};
		
		//定义一个临时存储容器
		char[] arr = new char[32];
		//定义一个操作数组的指针
		int pos = arr.length;
		while(num != 0){
			int temp = num & 1;
			arr[--pos] = chs[temp];
			num = num >>> 1;
		}
		for (int i = pos; i < arr.length; i++) {
			System.out.print(arr[i]);
		}
		
	}
十二.数组(进制转换优化)

	/*
		十进制--->二进制
	*/
		public static void toBin(int num ){
			trans(num, 1, 1);
		}
	
	/*
		十进制--->八进制
	 */
		public static void toBa(int num ){
			trans(num, 7, 3);
		}
	
	
	/*
		十进制--->十六进制
	 */
		public static void toHex(int num ){
			trans(num, 15, 4);
		}
	
	
	public static void trans(int num , int base,int offset){
		if(num == 0 ){
			System.out.println(0);
			return;
		} 
		char[] chs = {'0','1','2','3',
			      '4','5','6','7',
			      '8','9','A','B',
			      'C','D','E','F'};
		char[] arr = new char[32];
		int pos = arr.length;
		while(num != 0 ){
			int temp = num & base;
			arr[--pos] = chs[temp];
			num = num >>> offset;
		}
		for (int i = pos; i < arr.length; i++) {
			System.out.print(arr[i]);
		}
	}

十三.数组(二维数组)

数组中的数组

把数组作为元素存到了另一个数组当中  这个数组叫做 二维数组

int[][] arr = new int [3][4];//3是二维数组的长度   4是二维数组中 每一个一维数组的长度

定义了名称为arr的二维数组

二维数组中有3个一维数组

每一个一维数组中有四个元素

 int[][] arr = new int[3][];

数组是引用数据类型  初始化值为null

		//获取二维数组里所有元素的和
		int sum = 0;
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				sum += arr[i][j];
			}
		}
		System.out.println(sum);
	}

---------------------- android培训java培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值