一. 数组定义格式
格式1:数据类型[] 变量名;
范例:int[] arr;
格式2:数据类型 变量名[];
范例: int arr[];
二. 数组初始化方式
1.1静态初始化:【初始化时指定每个数组元素的初始值,由系统决定数组长度】格式:数据类型[] 变量名 = new 数据类型[]{数据1,数据2,数据3,…};范例:int[] arr = new int[]{1,2,3}; int[] arr = {1,2,3};1.2动态初始化:【初始化时只指定数组长度,由系统为数组分配初始值】格式:数据类型[] 变量名 = new 数据类型[数组长度];范例:int[] arr = new int[3];代码案例://格式:数据类型[] 变量名 = new 数据类型[数组长度];int[] arr = new int[3];//修改数组中的元素arr[0] = 10;arr[1] = 20;arr[2] = 30;1.3使用场景:静态初始化:开始就存入元素值,适合一开始就能确定元素值的业务场景动态初始化:指定数组长度,后期赋值,适合开始知道数据的数量,但是不确定具体元素值的业务场景1.4注意:两种初始化的方式是独立的,不可以混用如错误使用:int[] arr = new int[3]{30,40,50};
三.数组元素访问
(1)数组变量访问方式格式:数组名(2)数组内部保存的数据的访问方式格式:数组名[索引](3)数组元素访问代码案例
public class ArrayDemo {public static void main(String[] args) {//1.定义一个数组,并进行初始化int[] scores = new int[]{93,96,99}; //int[] scores = {93,96,99};//2.输出数组名System.out.println(scores); //[I@776ec8df//3.输出数组中的元素System.out.println(scores[0]);System.out.println(scores[1]);System.out.println(scores[2]);System.out.println("-----------");//4.修改数组中的元素scores[0] = 100;scores[1] = 98;scores[2] = 95;//5.再次输出数组中的元素System.out.println(scores[0]);System.out.println(scores[1]);System.out.println(scores[2]);}}
四.数组常见操作
(1)数组遍历
public class ArrayTest01 {public static void main(String[] args) {//1.定义数组并初始化int[] arr = {77, 88, 99, 66, 55, 44};//2.获取数组中的元素System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);System.out.println(arr[3]);System.out.println(arr[4]);//3.用循环改进for (int i=0; i<5; i++) {System.out.println(arr[i]);}//4.格式:数组名.lengthSystem.out.println(arr.length);for (int i=0; iSystem.out.println(arr[i]);}}}
(2)获取数组最大值
public class ArrayTest02 {public static void main(String[] args) {//1.定义数组int[] arr = {12, 45, 98, 73, 60};//2.定义变量max存储最大值,取第一个数据为变量的初始值int max = arr[0];//3.与数组中剩余数据逐个比对,每次比对将最大值保存到变量max中for (int i=1; iif(arr[i] > max) {max = arr[i];}}//4.循环结束后输出变量max的值System.out.println("max:" + max);}}
(3)数组元素打乱
1.1涉及到的操作
获取数组中元素的随机索引
Random r = new Random();
int index = r.nextInt(arr.length);
数组中元素交换
int a = 10;
int b = 20;
int temp = a;
a = b;
b = temp;
1.2数组元素打乱代码实现
public class ArrayTest03 {public static void main(String[] args) {//1.定义数组int[] arr = {12, 45, 98, 73, 60};//2.生成随机交换的索引Random r = new Random();int index = r.nextInt(arr.length);//3.第一次交换int temp = arr[0];arr[0] = arr[index];arr[index] = temp;//4.第二次交换index = r.nextInt(arr.length);temp = arr[1];arr[1] = arr[index];arr[index] = temp;//5.遍历交换Random r = new Random();for (int i = 0; i < arr.length; i++) {int index = r.nextInt(arr.length);int temp = arr[i];arr[i] = arr[index];arr[index] = temp;}//6.遍历输出数组[idea快捷方式:arr.fori]for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}}
四.数组案例练习
(1)需求:
定义一个可以存储5个元素的int数组,数据来自于键盘录入,
最后遍历数组,把元素输出在控制台
public class ArrayTest {public static void main(String[] args) {//1.定义一个数组,并进行动态初始化int[] arr = new int[5];//2.创建键盘录入对象Scanner sc = new Scanner(System.in);//3.循环录入数据并赋值给数组元素for (int i = 0; i < arr.length; i++) {System.out.println("请输入第" + (i + 1) + "个元素:");arr[i] = sc.nextInt();}//4.调用方法遍历数组printArray(arr);}/* *定义一个循环遍历数组方法,并优化输出数组显示。 */public static void printArray(int[] arr) {System.out.print("["); //输出内容不换行for (int i = 0; i < arr.length; i++) {if(i==arr.length-1) {System.out.print(arr[i]); //输出内容不换行}else {System.out.print(arr[i] + ", "); //输出内容不换行}}System.out.println("]"); //输出内容并换行}}
五.数组内存图
六.数组访问和使用问题
(1)索引越界:访问了数组中不存在的索引对应的元素,造成索引越界问题
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
int[] arr = new int[3];
System.out.println(arr[3]);
(2)空指针异常:对象不再指向堆内存,还想继续访问数据,访问失败
Exception in thread “main” java.lang.NullPointerException: Cannot load from int array because “arr” is null
int[] arr = new int[3];
arr = null;
System.out.println(arr[0]);
//解决空指针异常
if(arr != null) { System.out.println(arr[0]); }