黑马程序员技术交流社区

标题: day05 [打印本页]

作者: HEY、baby    时间: 2015-9-4 22:17
标题: day05
数组:Array
        为什么要有数组?
                用来存储多个同类型的数据。
        什么是数组?(掌握)
                就是用来存储多个同类型数据的容器。数组即可以存基本类型,也可以存引用类型。
                数组的索引(角标,下标)是从0开始的,
                数组的最大索引: arr.length - 1;
        格式:
                动态初始化:给出长度,让系统来给定初始化值。
                        数据类型[] 数组名 = new 数据类型[数组的长度];
                        int[] arr = new int[5];
                        各数据类型的默认初始化值:(掌握)
                                byte,short,long,int :0
                                float,double : 0.0
                                char: '\u0000'
                                boolean:false
                        了解:
                                System.out.println(arr);   //[I@19bb25a  
                                I:Integer是基本类型int类型的包装类
                                19bb25a:该对象的哈希码的无符号的十六进制形式。
                        内存是如何划分:
                                栈:存的是局部变量。 (特点:先进后出)
                                        局部变量:定义在方法中或者方法的声明上的变量。
                                        public static int getSum(int a,int b){
                                                int sum = a + b;
                                                return sum;
                                        }
                                堆:存的是所有new出来的东西(数组,对象)。
                        int[] arr1 = new int[3];   //0x0011
                        sop(arr1);
                        int[] arr2 = new int[3];
                        int[] arr3 = arr1;

                静态初始化:给出初始化值,让系统来定义长度。
                        普通版:int[] arr = new int[]{1,2,3,4,5};  //注意,=号右边的括号中不能写长度
                        简化版:int[] arr = {1,2,3,4,5};

数组的常见操作:(掌握)
        遍历:
                1、获取到数组的长度,根据数组的长度计算出数组的最大索引。
                2、通过for循环遍历。
        获取最值:
                最大值:
                        1、定义一个变量max,来记录最大值,初始值是数组中的第一个元素。
                        2、通过for循环,遍历数组,拿到数组中的每一个元素,然后依次和max比较,
                                如果遍历到的元素比max大,就把该元素的值给max。
                                循环结束后,max记录的就是最大值。
                                public static int getMax(int[] arr){
                                        int max = arr[0];
                                        for(int x = 1; x<arr.length; x++){
                                                if(arr[x]>max){
                                                        max = arr[x];
                                                }
                                        }
                                        return max;
                                }
        数组反转:
                1、如何定义出方法.
                        A:返回值:void
                        B:参数列表:int[]

                2、定义一个第三方变量。
                3、通过for循环获取到数组中的每一个元素,按照第一个和最后换,第二个和倒数第二个换的规则。。
                  进行交换变量。(规则:arr[i] 和 arr[arr.length-1-i])
                  public static void reverseArray(int[] arr){
                                int temp = 0;
                                for(int i = 1; i<arr.length/2; i++){
                                        //就是交换:arr[i] 和 arr[arr.length-1-i]
                                        temp = arr[i];
                                        arr[i] = arr[arr.length-1-i];
                                        arr[arr.length-1-i] = temp;
                                }

                  }

        查表法:(大白话,就是根据索引,找数组中对应位置的元素)
                做完的同学思考:
                        通过键盘录入一个数据,然后打印出数组中对应位置的元素,应该怎么做?
                        数组如下:
                                char[] chs = {'','一','二','三','四','五','六','七'};

        基本查找:(查找某个值在数组中的索引)
                1、遍历数组,拿到数组中的每一个元素。
                2、判断当前遍历到的元素和要查找的元素是否一致。
                        如果一致,就将当前元素的索引返回。
                        如果不一致,就返回-1。


二维数组:
        概述:每个元素都是一维数组的数组,就叫二维数组。
        格式1:
                int[][] arr = new int[3][2];
                //二维数组中多个一维数组的长度可以不同(之后学习),且存储的是一维数组的地址值
        格式2:
                int[][] arr = new int[3][];
        格式3:
                int[][] arr = { {1,2,3},{4,5},{7,8,9},{12,13}};

                //int[][] arr = { A,B,C,D};

        二维数组的遍历:
                1、通过for循环遍历二维数组,拿到每一个一维数组。
                2、遍历一维数组的代码,咱们讲过了。
                for(int i = 0; i<arr.length; i++){   //这一步是拿到二维数组中的所有一维数组(arr[i])
                        //arr[i]就是当前遍历到的一维数组  ABC
                        for(int j = 0; j<arr[i].length; j++){
                                Sysetm.out.print(arr[i][j] + " ");
                        }
                        System.out.println();
                }

        二维数组求和:
                1、通过for循环遍历二维数组,拿到每一个一维数组。
                2、遍历每个一维数组,拿到一维数组中的每一个元素,然后累加即可。
                某商场:
                        第一季度:20,60,80
                        第二季度:10,1,20
                        第三季度:5,50,150
                        第四季度:60,0,0

Java中的参数传递问题:
        Java中只有值传递,引用传递传递的是地址值。
        基本类型:形参的改变不影响实参。
        引用类型:形参的改变直接影响实参。(String有点特殊)
               
                需求:
                        1、定义一个长度为5的数组,然后分别给各个元素赋值为:1,2,3,4,5,然后打印各个元素的值
                                int[] arr = new int[5];
                                arr[0] = 1;
                        2、第一个数组,元素为(6,7,8,9,10),然后给第三个元素赋值为:521,打印各个元素的值。
                                int[] arr = {1,2,3,4,5};
                                打印第一个元素:sop(arr[0]);
                                打印最后一个元素:sop(arr[4]);
                                sop(arr[14]);
                        3、int[] arr = {1,2,3,4,5};    //自己写一个print(),来遍历数组


       
        中午作业:(全部通过方法来实现)
                1、已知数组,通过遍历打印出数组中的每一个元素。
                2、已知数组,写一个方法,求出数组中的最大值。
                3、已知数组,求任意一个数字,在数组中出现的位置。(索引)
                        int[] arr = {1,2,3,4,5};  求3的索引。
                       
                自己画一个下一个数组的内存图。int[] arr = {1,2,3,4,5};

                int[] arr = {1,2,3,4,5,6};

                                        {6,5,4,3,2,1};




               




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2