数组操作

  • 数组赋值——杨辉三角
  • 数组的复制
  • 数组的反转
  • 线性查找
  • 二分法查找
  • java中的Arrays类


数组赋值——杨辉三角

  • 给数组元素赋值
//		多维数组的使用1:使用二维数组打印一个10行杨辉三角
				int[][] arr= new int[10][];
				
				
				//给数组的元素赋值
				for(int i = 0;i<arr.length;i++) {
					arr[i] = new int[i+1];
					
					//给首末元素赋值
					arr[i][0] = arr[i][i] = 1;
					
					//给其余元素赋值
					  	for(int j = 1;j<arr[i].length-1;j++) {
								arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
						}
						//错误代码	
						/*					  	for(int j = 0;j<i;j++) {
															if(i == 1 || i==j) {
																arr[i][j] = 1;
															}
															else {
																arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
															}
															System.out.print(arr[i][j]);
														}
														System.out.println();*/
				}
					
				for(int i = 0;i<arr.length;i++) {
					for(int j = 0;j<arr[i].length;j++) {
						System.out.print(arr[i][j]+" ");
					}
					System.out.println();
				}

输出

1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 
1 8 28 56 70 56 28 8 1 
1 9 36 84 126 126 84 36 9 1

定义一个int型的一维数组,包含10个元素,分别赋一写随机整数,求出最大值,最小值,和,平均值并输出。要求:所有的数都是两位数

int arr[] = new int[10];
				for (int i = 0;i<arr.length;i++) {
					arr [i] = (int)(Math.random()*(99 - 10 +1) + 10);//Java中生成a到b的随机数 (int)(Math.random()*(b-a)+a+1);
				}
				
				for(int x:arr) {
					System.out.print(x+" ");
				}

输出

25 75 81 86 56 35 22 12 26 22

数组的复制

错误写法

int[] array1 = new int[] {2,3,5,7,11,13,17,19};
		int[] array2 = new int[8];
		int temp = 0;
		//数组的赋值必须通过遍历循环,不可以直接用“=”赋值,因为这样改变的只是把原来数组的
        array2 = array1;
        
        //修改array2。注意这里没有对array1进行操作
        array2[0] = 0;
        array2[1] = 0;
        array2[2] = 0;
		
		System.out.println();
		//遍历新数组
		for(int y:array2) {
			System.out.print(y + "\t");
		}
		//遍历原数组
		System.out.println();
		for(int y:array1) {
			System.out.print(y + "\t");
		}

输出:

0	0	0	7	11	13	17	19	
0	0	0	7	11	13	17	19

这里虽然只对新数组做了修改操作,但是原数组的元素依然发生了改变,这是因为,当我们用 "="赋值时,只是将原数组的地址值给了新数组名,即是说,其实新数组和原数组指向的是堆空间中的同一个数组

正确写法

int[] array1 = new int[] {2,3,5,7,11,13,17,19};
				int[] array2 = new int[8];
				int temp = 0;
				//数组的赋值必须通过遍历循环,不可以直接用“=”赋值,因为这样改变的只是把原来数组的
				for(int x:array1) {
					if(temp%2 == 0) {
						array2[temp] = temp;
					}
					else {
						array2[temp] = x;
					}
					
					temp++;
					System.out.print(x+"\t");
				}
				
				System.out.println();
				
				for(int y:array2) {
					System.out.print(y + "\t");
				}
				
				System.out.println();
				for(int y:array1) {
					System.out.print(y + "\t");
				}

输出

2	3	5	7	11	13	17	19	
0	3	2	7	4	13	6	19	
2	3	5	7	11	13	17	19

总结:如果我们要复制一个数组,只能遍历赋值,一次把每一个元素赋给新数组元素。

数组的反转

数组的反转操作就是把原本在第一个的元素放在最后,在最后的元素放在开头,其他位置的元素也对称交换,这里需要定义中间变量来辅助完成操作

//例1
				int[] array1 = new int[] {2,3,5,7,11,13,17,19};
				for(int y:array1) {
					System.out.print(y + "\t");
				}		
				int x;//用于交换值的中间变量
				for(int i = 0;i<array1.length/2;i++) {
					x = array1[i];
					array1[i] = array1[array1.length - i -1];
					array1[array1.length - i - 1] = x;
				}
				
				System.out.println();
				for(int y:array1) {
					System.out.print(y + "\t");
				}

线性查找

String[] arr = new String[] {"AA","BB","CC","DD","EE","FF","GG"};
				boolean isFlag = true;
						for(int i = 0;i < arr.length;i++) {
							if(arr[i].equals("HH")) {
								System.out.println("找到了指定的元素,位置为:"+i+" 是第 "+(i+1)+" 个元素.");
								isFlag = false;
								break;
							}
						}
						
						if(isFlag) {
							System.out.println("很抱歉,没有找到!");
						}

二分法查找

二分法查找的前提是数组是有序的

int[] arr = new int[] {-10,-9,-6,2,3,5,7,15,17,99};
				
				int dest = 99;
				int head = 0;//初始的首索引
				int end = arr.length - 1;//初始的末索引
				boolean isFlag = true;
				
				while(head <= end) {
					int middle  = (head + end)/2;
					
					if(dest == arr[middle]) {
						System.out.println("找到了指定的元素,位置为:"+middle+" 是第 "+(middle+1)+" 个元素.");
						isFlag = false;
						break;
					}
					else if(arr[middle]>dest) {
						end = middle - 1;
					}else {
						head = middle + 1;
					}
				}
				
				if(isFlag) {
					System.out.println("很抱歉,没有找到!");
				}

输出

找到了指定的元素,位置为:9 是第 10 个元素.

java中的Arrays类

Arrays常用方法 注意,使用binarySerch前,先对数组sort,因为binarySerch底层采用二分搜索技术。