文章目录
序言
数组是用来存储一批同种类型数据的内存区域。
数组的定义
静态初始化数组
定义数组的时候直接给数组赋值。
格式:
数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3};
double[] scores = new double[]{11.2, 22.3, 33.4};
// 简写模式
数据类型[] 数组名 = {元素1, 元素2, 元素3};
double[] scores1 = {11.2, 22.3, 33.4};
数据类型[] 数组名也可以写成数据类型 数组名[]
数组的访问
数组名称[索引]
数组的长度属性:数组名称.length
System.out.println(arr[0]);
// 修改
arr[0] = 14;
System.out.println(arr[0]);
Attention! 数组一旦定义出来,程序执行过程中,长度、类型就固定了。
动态初始化数组
定义数组的时候,只确定元素的类型和数组的长度,之后再存入具体数据。
格式
数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];
初始化的时候,根据类型自动赋上默认值:
| 类型 | 默认值 |
|---|---|
| 整数 | 0 |
| 浮点数 | 0.0 |
| 布尔类型 | false |
| 引用类型 | null |
Attention! 两种定义方式是独立的,不可以混用。
数组的遍历
一般使用for循环,配合arr.length属性。
案例:已知高考前做了10次模拟测试,成绩分别为630, 620, 650, 589, 712, 689, 698, 678, 673, 721,问平均分数是多少?
public class TraverseArray {
public static void main(String[] args) {
int[] scores = {630, 620, 650, 589, 712, 689, 698, 678, 673, 721};
// 计算结果
int res = 0;
for (int i = 0; i < scores.length; i++) {
res += scores[i];
}
System.out.println(1.0 * res / scores.length);
}
}
数组的案例
猜数字游戏
需求:游戏后台随机生成1-20之间的5个数(无所谓是否重复),然后让大家来猜数字。
import java.util.Random;
import java.util.Scanner;
public class GuessGame {
public static void main(String[] args) {
Random r = new Random();
Scanner sc = new Scanner(System.in);
int guessNumber;
int[] luckNumbers = new int[5];
// 初始化赋值
for (int i = 0; i < luckNumbers.length; i++) {
luckNumbers[i] = r.nextInt(20) + 1;
}
// 开始猜数游戏
OUT:
while(true){
System.out.println("请输入你猜的数字:");
guessNumber = sc.nextInt();
// 遍历查看是否在数组中
for (int i = 0; i < luckNumbers.length; i++) {
if(guessNumber == luckNumbers[i]){
System.out.println("你猜对啦!位置是" + i);
break OUT;
}
}
System.out.println("再猜一次...");
}
System.out.println("数组内容如下:");
// 输出数组
for (int i = 0; i < luckNumbers.length; i++) {
System.out.print(luckNumbers[i] + "\t");
}
}
}
冒泡排序
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {54, 323, 345, 456, 563, 435, 542, 4, 46, 6};
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];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println("排序后的数组:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
数组的内存图

两个数组变量指向同一个数组对象
public class TogetherArray {
public static void main(String[] args) {
int[] arr = {11, 22, 33};
int[] arr2 = arr;
System.out.print("这是arr的地址和内容\n" + arr + ":");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.print("\n这是arr2的地址和内容\n" + arr2 + ":");
for (int i = 0; i < arr2.length; i++) {
System.out.print(arr2[i] + "\t");
}
arr2[0] = 44;
arr2[1] = 55;
arr2[2] = 66;
System.out.print("\n这是arr的地址和内容\n" + arr + ":");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.print("\n这是arr2的地址和内容\n" + arr2 + ":");
for (int i = 0; i < arr2.length; i++) {
System.out.print(arr2[i] + "\t");
}
}
}
数组使用的常见问题
索引越界
数组变量为null,并访问内容
Debug工具的使用
- 在需要控制的代码行左侧,点击一下,形成断点
- 选择使用Debug方式启动程序,启动后程序会在断点暂停
- 控制代码一行一行的往下执行