5数组

90 阅读6分钟
数组的概念和数组变量的定义【重点】
数组的初始化及使用【重点的重点】		---------------最核心的内容--------------
数组的内存图【理解】
数组的练习【重点的重点】			   ---------------最核心的内容--------------
数组的常见问题【理解】

快捷键:
    生产输出语句: 表达式.sout
    数组遍历:
    	数组名.fori: 正着遍历
    	数组名.forr: 倒着遍历
 多个数据的类型必须保持一致
 数组的长度一旦确定,将永远不可以发生改变
 数组变量定义格式一:		推荐使用
	数据类型[] 数组名称;
        
  数组变量定义格式二:		不推荐使用的
	数据类型 数组名称[];  
 
(1)定义一个存储int类型数组的变量arrayA int[] arrayA;
 (2)定义一个存储double类型数组的变量arrayB double[] arrayB;
 (3)定义一个存储char类型数组的变量arrayC    char[] arrayC;
 数组的第一种初始化方式(动态初始化: 指定数组长度)
格式: 数据类型[] 数组名称 = new 数据类型[长度];
右侧数据类型: 和左侧保持一致
长度: 规定了数组容器中可以存储多少个数据
 char[] arrayC = new char[5];
 数组的第二种初始化方式(标准格式静态初始化: 指定元素)
 格式: 数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,...,元素n最后一个元素后面没有逗号};
 右侧[]中不能写长度
  double[] arrayB = new double[]{1.1, 2.2, 3.3, 4.4};
  数组的第三种初始化方式
  数组的第三种初始化方式(简化格式静态初始化: 指定元素)
  格式:  数据类型[] 数组名称 = {元素1,元素2,...,元素n};	
    int[] arrayA = {100, 200, 300};
     //(4)动态初始化和标准格式的静态初始化数组,可以分成两步完成
        int[] arr;
        arr = new int[3];//动态初始化
        //....
        arr = new int[]{10,20,30,50,80};//标准格式静态初始化

        //arr = {100,200,300,500};//错误的: 不允许

        int[] arr2 = {100,200,300,500};
  ### 数组的使用从0开始到数组长度减1,(3)索引编号必须是一个>=0的int数据
  数组名称.length   length后面没有(),添加()是错误的
    //获取数组长度
        int size = array.length;//获取数组长度,保存到int变量size中
         array[array.length-1]: 是在获取数组中的某个元素,[]中写必须是一个int数字
  ### 数组遍历   
   注意for循环的结束条件的两种写法:
        <=array.length - 1
        <array.length
 */
public class Demo01ArrayEach {
    public static void main(String[] args) {
        //定义int数组array,并采用简化格式初始化
        int[] array = {100, 200, 300}; 
        //使用for循环获取代表索引的int数字0,1,2
        for (int i = 0; i < 3; i++) {
            System.out.println("索引编号: " + i + " 对应的元素值: " + array[i]);
        }
        System.out.println("------------");

        //以上for循环中,数字3写死了,可以使用数组的长度(array.length)代替
        for (int i = 0; i < array.length; i++) {
            //System.out.println("索引编号: "+i+" 对应的元素值: "+array[i]);
            System.out.println(array[i]);
        }
        System.out.println("------------");

        for (int i = 0; i <= array.length-1; i++) {
            System.out.println(array[i]);
        }
    }
}
### 求int数组元素和
/*
    需求:
        计算一个int数组的元素之和

    实现步骤:
        1.创建int数组array,并初始化
        2.定义int变量sum,初始值0,用来累加计算数组元素的和
        3.使用for循环遍历数组
        4.把数组中当前元素值累加到求和变量sum中
        5.for循环结束后,打印sum的值
 */
public class Demo04SumArray {
    public static void main(String[] args) {
        //1.创建int数组array,并初始化
        int[] array = {100, 200, 300, 400};

        //2.定义int变量sum,初始值0,用来累加计算数组元素的和
        int sum = 0;
    //3.定义int变量count,初始值0,用来统计偶数元素的个数
        int count = 0;最大值
                //2.假设变量a中的值是最大的,保存到int变量max中
        int max = a;
            //2.假设索引为0的元素是最大的,保存到int变量max中
        int max1 = array[0];### 最大值元素
        
        //3.使用for循环遍历数组
          //3.使用for循环依次获取后面(从索引1开始)的每个元素
        for (int i = 0; i < array.length; i++) {
            //4.把数组中当前元素值累加到求和变量sum中
            sum = sum + array[i];//sum += array[i]
        }
        if (array[i] % 2 == 0) {
                //4.2 打印当前偶数元素
                System.out.println(array[i]);

                //4.3 把当前偶数元素累加到求和变量sum中
                sum += array[i];

                //4.4 计数器count的值增加1
                count++;
            }
                  //3.使用if判断,如果b的值大于max,说明max中的值已经不是最大的了
        if (b > max) {
            //3.1 把b的值赋值给max
            max = b;
        }

        //4.使用if判断,如果c的值大于max,说明max中的值已经不是最大的了
        if (c > max) {
            //4.1 把c的值赋值给max
            max = c;
        }
          //3.1 如果当前元素值 大于 max,说明max中已经不是最大的了
            if (array[i] > max1) {
                //3.2 把当前元素值,赋值给max
                max1 = array[i];
            }
        //5.for循环结束后,打印sum的值
          System.out.println("所有的偶数元素的个数: " + count);
            System.out.println("最大值: "+max1); 
           System.out.println("最大值: " + max);
        System.out.println("数组元素和: " + sum);
    }
}
 一个数组内存图
        1.动态初始化数组,元素有默认值
            (1)基本类型
                整数数组: 0
                小数数组: 0.0
                布尔数组: false
                字符数组: 空白字符
            (2)引用类型
                所有引用类型数组: null
        2.注意
            (1)数组变量保存数组在堆内存空间的地址值
            (2)通过数组变量中保存的地址值,找到堆内存空间的具体的数组
            (3)再通过索引编号,找到要操作的该数组中的具体的某个元素
 */
 数组索引越界ArrayIndexOutOfBoundsException
 产生原因:  当使用int数字作为索引获取数组元素时,索引值已经超出了数组的索引范围
 解决方案:
(1)不使用超出索引范围的int数字来获取数组元素
(2)修改索引越界的数字,让它在数组索引范围内
### 数组空指针异常NullPointerException类,
 数组变量的值是null时,说明该数组变量已经不再执行堆内存空间的任何数组了, 所以就无法通过索引的方式访问数组元素了,只要访问,就会报出空指针异常
 (1)不使用值是null的数组变量来获取数组元素
            (2)找到数组变量值是null的地方,给数组变量重新赋值,让改数组变量重新指向一个新的数组空间