A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 迦南 中级黑马   /  2014-8-30 20:53  /  723 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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


1 个回复

倒序浏览
这不是毕老师基础视频的笔记吗。?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马