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);
			}
		}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值