数组的第一种定义格式,int[] arr
xxxxxxxxxx数据类型[] 变量名 //定义了int类型的数组,数组名是arr。推荐使用这种写法定义数组数组的第二种定义格式,int arr[]
xxxxxxxxxx数据类型 变量名[] //定义了int类型的数组,变量名是arr数组
数组的动态初始化: 初始化时,只指定数组长度,由系统为数组分配初始值
数据类型[] 变量名 = new 数据类型[数组长度]int[] arr = new int[3]数组的静态初始化: 初始化时,指定每个数组元素的初始值,由系统决定数组长度
数据类型[] 变量名 = new 数据类型[]{数据1,数据2,数据3,……}int[] arr = new int[]{1,2,3,……}数据类型[] 变量名 = {数据1,数据2,数据3,……}int[] arr = {1,2,3,……}
数组元素访问:
(1)数组变量的访问方式
数组名(2)数组内部保存的数据的访问方式
数组名[索引]
内存分配: 数组元素、内存地址存放在堆,数组名存放在栈,数组名指向内存地址,数组在初始化时,会为存储空间添加默认值,相关默认值如下
| 数据类型 | 默认值 |
|---|---|
| 整数 | 0 |
| 浮点数 | 0.0 |
| 布尔值 | false |
| 字符串 | 空字符串 |
| 引用数据类型 | null |
堆内存
xxxxxxxxxx存储局部变量,即存储定义在方法中的变量,例如arr使用完毕立即消失
栈内存
xxxxxxxxxx存储new出来的内容(实体、对象)。数组在初始化时,会为存储空间添加默认值 。每一个new出来的东西都有一个地址值使用完毕立即消失
数组操作的两个常见小问题
(1)索引越界: 访问了数组中不存在的索引对应的元素
int[] sdk = new int[3];System.out.println(sdk[3]);(2)空指针异常: 访问的数组已经不再指向堆内存的数据
x
int[] gym = new int[3];System.out.println(gym[2]);//把null赋值给数组gym = null;//输出元素System.out.println(gym[0]);
数组
xxxxxxxxxxpackage ch1;
public class a2_1数组 { public static void main(String[] args) { int[] arr = new int[3]; //输出数组名 System.out.println(arr); //输出[I@2d98a335,为地址值 //输出数组中的元素 System.out.println(arr[0]);//输出0 System.out.println(arr[1]);//输出0 System.out.println(arr[2]);//输出0
int[] svg = new int[3];
//输出数组名及元素 System.out.println(svg); System.out.println(svg[0]); System.out.println(svg[1]); System.out.println(svg[2]);
//给数组中的元素赋值 svg[0] = 100; svg[2] = 200;
//再次输出数组名及元素 System.out.println(svg); System.out.println(svg[0]); System.out.println(svg[1]); System.out.println(svg[2]);
//栈内存的arr2和arr3都指向堆内存里面new int[3] //多个数组指向相同的内存图,如下 int[] arr2 = new int[3]; arr2[0] = 9; arr2[1] = 99; arr2[2] = 999; System.out.println(arr2); System.out.println(arr2[0]); System.out.println(arr2[1]); System.out.println(arr2[2]);
//定义第二个数组指向第一个数组 int[] arr3 = arr2; arr3[0] = 1; arr3[1] = 11; arr3[2] = 111;
//输出两个数组的名及元素 System.out.println(arr2); System.out.println(arr2[0]); System.out.println(arr3); System.out.println(arr3[0]);
//简化格式,静态初始化定义数组 int[] cfg = {1,2,3,4,5};
//输出数组名 System.out.println(cfg); //输出地址值
//输出数组中的元素 System.out.println(cfg[0]); System.out.println(cfg[1]); System.out.println(cfg[2]); System.out.println(cfg[3]); System.out.println(cfg[4]);
//遍历数组中的每一个元素 int[] syk = {11,22,33,44,55}; for(int x=0; x<5; x++){ System.out.println(syk[x]); } //如何在不知道原数组长度的情况下,对数组进行遍历,如下 int[] gkh = {12,21,13,31,14,41,15,51}; for(int n=0; n<gkh.length;n++){ System.out.println(gkh[n]); }
//获取数组中元素的最值 int[] val = {2,45,21,8,57,9,10,34,76,35,47}; //定义一个变量,用于保存最值 //int max; //取数组中第一个数据作为max变量的初始值 int max = val[0]; //val[0]与数组中剩余的数据逐个比对 for(int m=1; m<val.length; m++){ //每次对比将最大值保存到变量中 if(val[m] > max){ max = val[m]; } } //循环结束后打印变量的值 System.out.println("max:" + max); }}数组遍历
x
public static void main(String[] args) { //print输出:多条输出语句不换行,在同一行输出 System.out.print("hello"); System.out.print("world"); //println输出:语句之间自动换行 System.out.println(""); System.out.println("hello"); System.out.println("world");
//如何遍历数组 //先定义一个数组,用静态初始化完成数组元素初始化 int[] arr = {1,2,3,4,5,6,7,8,9,0}; //再然后调用一下方法 printArray(arr);}
//再定义一个方法,用数组遍历通用格式对数组进行遍历public static void printArray(int[] arr){ System.out.print("["); for(int x = 0; x < arr.length; x++){ //如果是最后一个元素直接打印 if(x == arr.length-1){ System.out.print(arr[x]); } else{ //拼接字符串,加一个逗号 System.out.print(arr[x] + ","); } } System.out.println("]");}数组最大值
x
public static void main(String[] args) { //定义一个数组,用静态初始化完成数组元素初始化 int[] arr = {17,3,34,23,12,5,0,32}; //调用 int number = getMax(arr); System.out.println("number:" + number);}//定义一个方法,用来获取数组中的最大值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;}数组求和
xxxxxxxxxxpublic static void main(String[] args) { //需求:求和的元素个位和十位都不能是7,并且只能是偶数 //定义一个数组,用静态初始化完成数组元素的初始化 int[] arr = {68, 27, 95, 88, 171, 996, 51, 210}; //定义一个求和变量,初始值是0 int sum = 0; //遍历数组,获取到数组中的每一个元素 for(int x=0; x<arr.length; x++){ //判断该元素是否满足条件 if(arr[x]%10!=7 && arr[x]/10%10!=7 && arr[x]%2==0){ sum += arr[x]; } } //输出求和变量的值 System.out.println("sum:" + sum);}数组内容相同
xxxxxxxxxx//需求:比较两个数组的内容是否相同public static void main(String[] args) { //定义两个数组,分别使用静态初始化完成数组元素的初始化 int[] arr = {11, 22, 33, 44, 55}; int[] arr2 = {11, 22, 33, 44, 55}; //调用方法,用变量接收 boolean flag = compare(arr, arr2); //输出结果 System.out.println(flag);}
//定义一个方法,用于比较两个数组内容是否相同public static boolean compare(int[] arr, int[] arr2) { //首先比较数组的长度 if (arr.length != arr2.length) { return false; } //然后遍历,比较数组中的每一个元素,只要有元素不同,返回false for (int x = 0; x < arr.length; x++) { if (arr[x] != arr2[x]) { return false; } } //最后循环结束后,返回true return true;}数组查找元素
x
public static void main(String[] args) { //调用一个数组,用静态初始化完成数组元素的初始化 int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//键盘录入要查找的数据,用一个变量接收 Scanner sc = new Scanner(System.in);
System.out.println("input a sum of 1-10"); int number = sc.nextInt();
//定义一个索引变量,初始值为-1 int index = -1;
//遍历数组,获取到数组中的每一个元素 for (int x = 0; x < arr.length; x++) { //拿键盘录入的数据和数组中的每一个元素进行比较,如果值相同,就把该值对应的索引赋值给索引变量,并结束循环 if (arr[x] == number) { index = x; break; } } //输出索引变量 System.out.println("index:" + index);}使用方法查找元素
x
public static void main(String[] args) { //调用一个数组,用静态初始化完成数组元素的初始化 int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//键盘录入要查找的数据,用一个变量接收 Scanner sc = new Scanner(System.in);
System.out.println("input a sum of 1-10"); int number = sc.nextInt();
//调用方法 int index = getIndex(arr, number);
//输出索引变量 System.out.println("index:" + index);}
//定义一个方法,用于查找指定的元素在数组中的索引public static int getIndex(int[] arr, int number) { //定义一个索引变量,初始值为-1 int index = -1; //遍历数组,获取到数组中的每一个元素 for (int x = 0; x < arr.length; x++) { //拿键盘录入的数据和数组中的每一个元素进行比较,如果值相同,就把该值对应的索引赋值给索引变量,并结束循环 if (arr[x] == number) { index = x; break; } } //返回索引 return index;}翻转数组元素
x
public static void main(String[] args) {
//定义一个数组,用静态初始化完成数组元素的初始化 int[] arr = {1, 2, 3, 4, 5, 6, 7};
//循环遍历数组,这一次初始化语句调用两个索引变量,判断条件是开始索引小于等于结束索引 for (int start = 0, end = arr.length - 1; start <= end; start++, end--) { //变量交换,定义一个临时变量temp int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; } //调用下面写好的方法,遍历数组 printArray(arr);}
//遍历数组,这里使用方法对数组进行遍历public static void printArray(int[] arr) { System.out.print("[");
for (int x = 0; x < arr.length; x++) { if (x == arr.length - 1) { //当遍历到最后一个元素时 System.out.print(arr[x]); } else { //如果遍历到的不是最后一个元素 System.out.print(arr[x] + ","); } } System.out.println("]");}使用方法翻转数组
x
public static void main(String[] args) { //定义一个数组,用静态初始化完成数组元素的初始化 int[] arr = {1, 2, 3, 4, 5, 6, 7};
//调用下面写好的方法,实现翻转数组 reverse(arr); //调用下面写好的方法,实现遍历数组 printArray(arr);}
//翻转数组,这里使用方法对数组进行翻转public static void reverse(int[] arr){ //循环遍历数组,这一次初始化语句调用两个索引变量,判断条件是开始索引小于等于结束索引 for (int start = 0, end = arr.length - 1; start <= end; start++, end--) { //变量交换,定义一个临时变量temp int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; }}
//遍历数组,这里使用方法对数组进行遍历public static void printArray(int[] arr) { System.out.print("["); for (int x = 0; x < arr.length; x++) { if (x == arr.length - 1) { //当遍历到最后一个元素时 System.out.print(arr[x]); } else { //如果遍历到的不是最后一个元素 System.out.print(arr[x] + ","); } } System.out.println("]");}