数组的操作也可以大概分为增删查改。
Arrays.toString**:**把数组内的内容输出。
获取长度
获得数组的元素数量。
格式:
数组名.length
注意,请不要写成 ** 数组名.length()**
存数据
如果使用了动态初始化或者我们需要新增些元素进入数组,该如何操作呢?
格式:
数组名[索引] = 数据
注意一下我们新增元素的类型,也涉及到了索引超出(元素的个数超出了数组初始化的时候定义的长度)的问题。
我们甚至可以使用存数据来修改一下数组里的数据。
例子:
public class Demo02 {
public static void main(String[] args) {
int[] ages = new int[5];
// 存放第一个学生的年龄
ages[0] = 8;
String[] names = {"张三", "李四"};
// 张三有一个改了名字 张三三
names[0]="张三三"
}
}
public class Demo04 {
public static void main(String[] args) {
// 输入三个名字,放到数组中
Scanner scanner = new Scanner(System.in);
String[] strings = new String[3];
System.out.println("输入第一个:");
strings[0] = scanner.next();
System.out.println("输入第二个:");
strings[1] = scanner.next();
System.out.println("输入第三个:");
strings[2] = scanner.next();
System.out.println(strings[0]);
System.out.println(strings[1]);
System.out.println(strings[2]);
}
}
取数据
首先我们需要了解地址值这个名词,是指数组在内存中的唯一标识。
我们需要注意,取数据的几个点:
- 直接打印数组变量是得不到值,得到是数组的地址值
- 我们可以根据索引以及地址,找到其中的一项
- 取没有赋值的数据
- 取超出范围的数据
格式:
数组名[索引]
例子:
public class Demo06 {
public static void main(String[] args) {
// int[] arr = {1,2,3,4,5};
// // System.out.println(Arrays.toString(arr));
// // 输出的是数组的地址值
// System.out.println(arr);
// // 通过索引取内容:arr[0]
// System.out.println(arr[0]);
int[] arr1 = new int[5];
System.out.println(arr1[0]); // 0
double[] arr2 = new double[5];
System.out.println(arr2[0]); // 0.0
char[] arr3 = new char[5];
System.out.println((int)arr3[0]); // 空白字符 对应的int是0
boolean[] arr4 = new boolean[5];
System.out.println(arr4[0]); // false
String[] arr5 = new String[5];
System.out.println(arr5[0]); // null
}
}
这里有一个默认值问题:
- 整数: 0
- 小数: 0.0
- 字符: ‘\u0000’ -> 空白字符 -> 对应的int值是0
- 布尔: false
- 引用: null
遍历数组
遍历数组很简单,就是按照顺序的访问每一项,一般用到三个命令:
- fori(从头到尾)
- foreach
- forr(从尾到头)
public class Demo08 {
public static void main(String[] args) {
int[] ages = {1,2,3,4,2,5,7,3};
// 顺序的打印
System.out.println(Arrays.toString(ages));
for (int item : ages) {
System.out.println(item);
}
System.out.println("-----------");
for (int i = 0; i < ages.length; i++) {
int item = ages[i];
System.out.println(item);
}
int i = 0;
while (i < ages.length) {
System.out.println(ages[i]);
i++;
}
// 有啥问题,do...while会执行一次,所以可能出现索引超出的问题(数组的长度目前为0)
// int[] ints = new int[0];
// int j = 0;
// do {
// System.out.println(ints[j]);
// j++;
// } while (j < ages.length);
}
}
操作过程可能的问题
作数组的时候,索引超出怎么办?
public class Demo07 {
public static void main(String[] args) {
// 一个长度为5的数组
int[] ints = new int[5];
ints[0] = 1;
ints[1] = 1;
ints[5] = 1;
}
}
报错: ArrayIndexOutOfBoundsException
Array(数组) Index(索引) OutOf(超出) Bounds(边界) Exception(异常)
空指针异常
public class Demo07 {
public static void main(String[] args) {
// 一个长度为5的数组
int[] ints = new int[5];
ints[0] = 1;
ints[1] = 1;
ints[2] = 1;
// NullPointerException
ints = null;
System.out.println(ints[0]);
}
}
为什么?现在ints失去了地址的引用。