| 
 
| 1:数组的操作:
 (1)查找
 A:无序数组
 int[] arr = {33,22,11,44,55,66};
 public static int getIndex(int[] arr,int key) {
 for (int x = 0;x < arr.length;x++){
 if (key == arr[x]){
 return x;
 }
 }
 return -1;
 }
 
 
 B:有序数组 二分查找
 数组长度是6,最大角标值是5
 public static int getIndex(int[] arr,int key) {
 int min = 0;
 int max = arr.length-1;
 int 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;
 
 }
 
 (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;
 }
 
 }
 
 //把数组转换成字符串输出,因为任何数据类型与字符串用+想连接都会产生新的字符串
 int [] arr = {6,5,4,3,2,1};
 public static String arrToString(int[] arr) {
 String str = "[";
 for (int x = 0; x < arr.length; x++){
 if (x != arr.length - 1) {
 str = str + arr[x] + ", ";//[6, 5,
 }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'};
 //             0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15
 
 //定义一个数组,目的是把每次这个数与完15后的值,进行存储
 char[] arr = new char[8];
 
 //定义一个指针,用于操作数组
 int pos = arr.length-1;
 if (num == 0){
 System.out.println(num);
 return;
 }
 //当num不等于0的时候我们就让这个数不断与上15,和不断的想右移动四位
 while (num != 0){
 //每次的值需要存储在不同角标的位置上,所以指针的指向需要改变
 
 //用一个变量记录住这个数与上15的结果
 int temp = num & 15;//12
 //temp里面记录的结果肯定是在0到15之间,所以把temp当作定义表的角标值去找对应的元素
 //然后赋值到定义的数组中存储
 arr[pos] = chs[temp];//
 //上述操作是获取一个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];arr[1][0]
 A:定义了名称为arr的二维数组
 B:二维数组中有3个一维数组
 C:每一个一维数组中有2个元素
 D:一维数组的名称分别为arr[0], arr[1], arr[2]
 arr[0][0] arr[0][1]
 arr[1][0] arr[1][1]
 arr[2][0] arr[2][1]
 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[5];
 arr[2] = new int[7];
 (3)int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};arr[2].length
 A:二维数组有3个一维数组。
 B:第一个一维数组有3个元素
 第二个一维数组有2个元素
 第三个一维数组有4个元素
 (4)二维数组的遍历
 int[][] arr2 = new int[2][3];
 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);
 }
 }
 
 int[] y, x[];
 y是一维数组
 x是二维数组
 (a) x=y;                        no
 (b)x[0]=y;                        yes
 (c)x[0] = y[0];                no
 (d)x = y[0];                no
 (e)x[0][0] = y[0];        yes
 
 
 
 | 
 |