【Java_04】数组

馋奶兔 提交于 2020-02-26 07:46:32

一、数组的定义

1. 格式一

数据类型[] 数组名 = new 数据类型[数组长度];
例:int[] array = new int[5];
    即:定义存储 5 个 int 型数据元素的数组容器。

2. 格式二

数据类型[] 数组名 = new 数据类型[] {元素1, 元素2, ··· , 元素n};
例:int[] array = new int[] {1, 2, 3, 4, 5};
    即:定义存储 1, 2, 3, 4, 5 的数组容器。

3. 格式三

数据类型[] 数组名 = {元素1, 元素2, ··· , 元素n};
例:int[] array = {1, 2, 3, 4, 5};
    即:定义存储 1, 2, 3, 4, 5 的数组容器。

二、常见操作

1. 访问数组元素

① 索引( index )
    直接打印 array 时,会输出该数组的哈希地址值,需要使用索引访问对应的元素,索引从 0 开始计算。
② 数组长度( length )
    获取数组长度:数组名.length;
    数组的最大索引为 数组名.length - 1;
③ 访问数组元素
    数组名[index];
④ 示例
    public class Test {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3, 4, 5};
            int a = arr[0];
            System.out.println(a);
        }   
    } 

2. 遍历数组

① 分析
   * 遍历数组需要逐一将元素从数组中取出来。
   * int a = arr[0];    //index = 0; a = 1
     int b = arr[1];    //index = 1; b = 2
     int c = arr[2];    //index = 2; c = 3
     int d = arr[3];    //index = 3; d = 4
     int e = arr[4];    //index = 4; e = 5
   * 通过上面可以知道,将数组逐一取出只需要将 index++ 即可。
   * 故可以通过循环来实现数组的遍历。
② 示例
    public class Test {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3, 4, 5};

            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }

3. 获取数组的最值

① 分析
    * 假设第 0 号元素是最值
    * 将数组中其他元素注意拿出来与第 0 号元素进行比较。
    * 若其他元素大于/小于当前最值,则覆盖当前最值。
② 示例
    public class Test {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3, 4, 5};
            int max = arr[0];       //假设 arr[0] 是最大值
            int min = arr[0];       //假设 arr[0] 是最小值

            //遍历数组
            for (int i = 0; i < arr.length; i++) {
                //若数组元素大于 max 则替换 max
                if (max < arr[i]) {
                    max = arr[i];
                }
                //若数组元素小于 min 则替换 min
                if (min > arr[i]) {
                    min = arr[i];
                }
            }
 
            System.out.println("最大值为:" + max + "最小值为:" + min);
        }
    }

4. 数组的反转

① 分析
    * 将第 0 号元素与第 length - 1 号元素对换。
    * 将第 1 号元素与第 length - 2 号元素对换。
      ···
    * 将第 m 号元素与第 n 号元素对换。
    * 直到所有元素对换完毕,即:m > length / 2 或 m > n
② 示例
    public class Test {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3, 4, 5};
            int temp;       //声明一个临时变量

            for (int i = 0; i < arr.length / 2; i++) {
                //进行交换操作
                temp = arr[i];
                arr[i] = arr[arr.length - i - 1];
                arr[arr.length - i - 1] = temp;
            }
        }
    }

5. 数组作为参数和返回值

① 数组作为参数
    public class Test {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3, 4, 5};

            array(arr);   //数组做为参数,此时传递的是 arr 这个数组在堆内的地址值
        }
        
        public static void array(int[] array) {
            //array 拿到了 arr 的地址值, 此时 array 数组就代表着 arr 数组,他们是一体两名。
            for (int i = 0; i < array.length; i++) {
                System.out.println(array[i]);
            }
        }   
    }
② 数组作为返回值
    public class Test {
        public static void main(String[] args) {
            
            int[] array = arr();   //将 arr 的地址值赋给 array,他们也是一体两名。
            
            for (int i = 0; i < array.length; i++) {
                System.out.println(array[i]);
            }
        }
 
        public static int[] arr() {
            int[] arr = {1, 2, 3, 4, 5};
            
            return arr;     //数组做为返回值,此时返回的是 arr 这个数组在堆内的地址值
        }
    }
③ 传值与传址
    * 传值:只是将数值传过去,相当于复制了一份,不会改变原来的。
    * 传值:将数值的地址传过去,相当于两个人使用同一个东西,会改变原来的。

三、常见异常

1. 索引越界异常(IndexOutOfBoundsException)

① 见名知义,就是索引超过了数组所规定的界限(即超出了数组索引的最大范围)
② 示例
    public class Test {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3, 4, 5};

            System.out.println(arr[5]); //当前索引最大值为 4 ,却要打印索引为 5 的元素。
        }
    }

2. 控指针异常(NullpointException)

① 空指针异常就是数组名并没有指向一个数组地址。
② 示例
    public class Test {
        public static void main(String[] args) {
            int[] arr = null;   //定义一个数组,地址值为空

            System.out.println(arr[0]); //当前数组名并没有指向一个数组空间,却要打印一个不存在的元素
        }
    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!