数组的两个常见问题:
1 ,数组的空指针异常
数组必须进行初始化才能使用其中的元素.如果只是赋值一个null,没有进行创建. 那么就会发生 空指针异常NullPointerException 原因:忘了newe 解决:new一下 如下所示:public static void main(String[] args) { int[] array=null; System.out.println(array[0]); }
2,数组的越界异常
数组的索引编号从0开始,一直到数组的长度-1为止 如果访问数组时候,索引编号不存在,那么将会发生数组越界异常 原因:索引编号写错了 ArrayIndexOutOfBoundsException 解决:修改正确的索引编号如下所示:
public static void main(String[] args) { int[] array=null; array=new int[3]; System.out.println(array[1]); System.out.println(array[3]); }
数组的反转(倒序遍历数组)
小练习
原来数组:[1,3,5,6,8,] 反转后的数组[,8,6,5,3,1] 要求:不能使用新数组,就用原来的数组如下所示:
public class Domo01 { public static void main(String[] args) { int[] array2 = {1, 3, 5, 6, 8,}; //遍历原来的数组 for (int i = 0; i < array2.length; i++) { System.out.println(array2[i]); } System.out.println("=".repeat(25));//分割线 //开始反转 for (int i = 0, j = array2.length - 1; i < j; i++, j--) { int team = array2[i];//team充当空容器,帮助array[i],array[j]交换位置 array2[i] = array2[j]; array2[j] = team; } //再次遍历看结果 for (int i = 0; i < array2.length; i++) { System.out.println(array2[i]); } }
结果:
数组作为 方法参数 的传递值
数组可以作为方法的参数。 当调用方法时,像小括号里传参,传递过去的其实是数组的地址值。接下来我们验证一下:
public class Domo01 { public static void main(String[] args) { //int[] array=null; //array=new int[3]; //System.out.println(array[1]); //System.out.println(array[3]); int[] array2 = {1, 3, 5, 6, 8,}; //遍历原来的数组 bainli(array2); System.out.println("=".repeat(25)); //开始反转 for (int i = 0, j = array2.length - 1; i < j; i++, j--) { int team = array2[i];//team充当空容器,帮助array[i],array[j]交换位置 array2[i] = array2[j]; array2[j] = team; } //再次遍历看结果 bainli(array2); System.out.println("bianli方法收到的参数:"+array2); } //将便利的for循环封装在方法里,就不用重复写了,直接调用即可 /* 方法三要素 返回值类型:不进行计算,不需要返回值,也没有结果,用void 方法名称:bianli 参数列表:设定数组,给我数组我才能便利打印其中的元素, */ public static void bainli(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } }}
运行结果:
数组中作为方法的返回值 的传递值
一个方法可以有多个参数,但是只能有一个返回值,不能有多个返回值。 如果一个方法中产生多个数据结果,都想进行返回,该怎么做呢? 这时候就可以使用一个数组作为返回值类型。 任何数据类型都可以作为方法的参数类型或返回值类型 数组作为方法的参数。传递过去的其实是数组的地址值。 数组作为方法的返回值。传递过去的也是数组的地址值。接下来我们尝试一下:
/** * @Auther: 桀桀桀 * @Date: 2022/6/25 16:17 * @Dwsoription: zhaoyanjie1 * @Version 1.0 **/ public class Domo02 { public static void main(String[] args) { int [] as= jisuan(13,24,14); System.out.println("sum:"+as[0]);//输出返回值 System.out.println("ave:" + as[1]); System.out.println("main方法接收到的返回值是:"+as); //[I@4f3f5b24 放回的是地址值 } public static int[] jisuan(int a, int b, int c) { int sum = a + b + c; int ave = (a + b + c) / 3; //两个结果都需要返回 //可以创建一个数组打包他们进行返回 int[] array = {sum, ave}; return array; } }
结果如下: