1. 数组是什么
- 数组就是用来存储一批同种类型数据的内存区域(可以理解成容器)
- 数组是属于引用数据类型
- 数组变量名中存储的是数组在内存中的地址信息
2. 数组如何定义
(1) 静态初始化数组
public class ArrayDemo1 {
public static void main(String[] args) {
double[] scores = {99.5, 88.0, 75.5};
int[] ages = {12, 24, 36};
String[] names = {"牛二", "全蛋儿", "老王"};
}
}
(2) 动态初始化数组
- 定义数组的时候只确定元素的类型和数组的长度,之后在存入具体数据
- 示例
public class ArrayDemo4 {
public static void main(String[] args) {
double[] scores = new double[3];
scores[0] = 99.5;
System.out.println(scores[0]);
System.out.println(scores[2]);
String[] names = new String[90];
names[0] = "迪丽热巴";
names[2] = "马尔扎哈";
System.out.println(names[0]);
System.out.println(names[1]);
System.out.println(names[2]);
}
}
(3) 两种数组定义时的特点和场景有什么区别
- 当前已经知道存入的元素值,用静态初始化
- 当前还不清楚要存入哪些数据,用动态初始化
3. 数组如何访问
public class ArrayDemo2 {
public static void main(String[] args) {
int[] ages = {12, 24, 36};
System.out.println(ages[0]);
System.out.println(ages[1]);
System.out.println(ages[2]);
ages[2] = 100;
System.out.println(ages[2]);
System.out.println(ages.length);
}
}
4. 数组的注意事项
- “数据类型[] 数组名” 也可以写成 “数据类型 数组名[]”
- 什么类型的数组存放什么类型的数据我,否则报错
- 数组一旦定义出来,程序执行的过程中,长度、类型就固定了
5. 数组元素默认值规则
数据类型 | 明细 | 默认值 |
---|
| byte、short、char、int、long | 0 |
基本类型 | float、double | 0.0 |
| boolean | false |
引用类型 | 类、接口、数组、String | null |
6. 数组遍历介绍
- 遍历:就是一个一个数据的访问
- 搜索、数据统计等等都需要用到遍历
- 示例
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = {12, 24, 12, 48, 98};
for (int i = 0; i < 5; i++) {
System.out.println(arr[i]);
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
7. 数组的案例
public class Test1 {
public static void main(String[] args) {
int[] money = {16, 32, 8, 100, 78};
int sum = 0;
for (int i = 0; i < money.length; i++) {
sum += money[i];
}
System.out.println("数组的元素和是:" + sum);
}
}
public class Test2 {
public static void main(String[] args) {
int[] faceScore = {15, 9000, 10000, 20000, 9500, -5};
int max = faceScore[0];
for (int i = 0; i < faceScore.length; i++) {
if (faceScore[i] > max) {
max = faceScore[i];
}
}
System.out.println("数组的最大值是:" + max);
}
}
public class Test3 {
public static void main(String[] args) {
int[] data = new int[5];
Random r = new Random();
for (int i = 0; i < data.length; i++) {
data[i] = r.nextInt(20) + 1;
}
Scanner sc = new Scanner(System.in);
OUT:
while (true) {
System.out.println("请您输入一个1-20之间的整数进行猜测:");
int guessData = sc.nextInt();
for (int i = 0; i < data.length; i++) {
if (data[i] == guessData) {
System.out.println("您已经猜中了该数据,运气不错了!您猜中的数据索引是:" + i);
break OUT;
}
}
System.out.println("当前猜测的数据在数组中不存在,请重新猜测!");
}
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + "\t");
}
}
}
public class Test4 {
public static void main(String[] args) {
int[] codes = new int[5];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < codes.length; i++) {
System.out.println("请输入第" + (i + 1) + "个员工的工号:");
int code = sc.nextInt();
codes[i] = code;
}
Random r = new Random();
for (int i = 0; i < codes.length; i++) {
int index = r.nextInt(codes.length);
int temp = codes[index];
codes[index] = codes[i];
codes[i] = temp;
}
for (int i = 0; i < codes.length; i++) {
System.out.print(codes[i] + "\t");
}
}
}
public class Test5 {
public static void main(String[] args) {
int[] arr = {5, 2, 3, 1};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
8. 数组常见问题
- 如果访问的元素位置超过最大索引,执行时会出现ArrayIndexOutOfBoundsException(数组索引越界异常)
- 如果数组变量中没有存储数组的地址,而是null,在访问数组信息时会出现NullPointerException(空指针异常)