--- title: "05-数组工程" created: 2025-12-02 tags: - Java --- # 数组工程 > [!note] 本篇定位 > 本篇聚合 IDEA 工程 `array-app` 的全部源码练习(2025-12 学),按包分节**全文收录**——当年的学习注释(`// 目标:…` `// 需求:…`)原样保留,是最真实的练习轨迹。工程怎么建、模块/包/类怎么管理见 [[00-管理项目|00-管理项目]]。 **包含 12 个 .java 练习**,目录结构: ```text array-app/src/ ├── com/zwnsyw/define/ArrayDemo.java ├── com/zwnsyw/define/ArrayDemo1.java ├── com/zwnsyw/define/ArrayDemo2.java ├── com/zwnsyw/define/ArrayDemo3.java ├── com/zwnsyw/define/ArrayDemo5.java ├── com/zwnsyw/define/ArrayTest4.java ├── com/zwnsyw/define/ArrayTest6.java ├── com/zwnsyw/demo/Test1.java ├── com/zwnsyw/demo/Test2.java ├── com/zwnsyw/demo/Test3.java ├── com/zwnsyw/memory/ArrayDemo1.java └── com/zwnsyw/memory/ArrayDemo2.java ``` ## 数组的定义与遍历 静态/动态初始化与遍历案例。 ### ArrayDemo.java ```java package com.zwnsyw.define; public class ArrayDemo { public static void main(String[] args) { int a = 10; System.out.println(a); int[] arr = {11, 22, 33}; System.out.println(arr); System.out.println(arr[1]); arr[0] = 44; arr[1] = 55; arr[2] = 66; System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); } } ``` ### ArrayDemo1.java ```java package com.zwnsyw.define; public class ArrayDemo1 { public static void main(String[] args) { // 目标:掌握数组的定义方式一:静态初始化数组。 // 1、数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3,.....} int[] ages = new int[]{12, 24, 36}; double[] scores = new double[]{89.9, 99.5, 59.5, 88}; // 2、简化写法: // 数据类型[] 数组名 = {元素1, 元素2, 元素3,.....} int[] ages2 = {12, 24, 36}; double[] scores2 = {89.9, 99.5, 59.5, 88}; // 3、数据类型[] 数组名 也可以写成 数据类型 数组名[] int ages3[] = {12, 24, 36}; double scores3[] = {89.9, 99.5, 59.5, 88}; } } ``` ### ArrayDemo2.java ```java package com.zwnsyw.define; public class ArrayDemo2 { public static void main(String[] args) { // 目标:掌握数组的访问。 int[] arr = {12, 24, 36}; //0 1 2 // 1、访问数组的全部数据 System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); // System.out.println(arr[3]); // 2、修改数组中的数据 arr[0] = 66; arr[2] = 100; System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); // 3、访问数组的元素个数:数组名.length System.out.println(arr.length); // 技巧:获取数组的最大索引: arr.length - 1(前提是数组中存在数据) System.out.println(arr.length - 1); int[] arr2 = {}; System.out.println(arr2.length - 1); } } ``` ### ArrayDemo3.java ```java package com.zwnsyw.define; public class ArrayDemo3 { public static void main(String[] args) { // 目标:掌握数组的遍历。 int[] ages = {12, 24, 36}; // 0 1 2 // System.out.println(ages[0]); // System.out.println(ages[1]); // System.out.println(ages[2]); for (int i = 0; i < ages.length; i++) { // i = 0 1 2 System.out.println(ages[i]); } //遍历简写:ages.fori for (int i = 0; i < ages.length; i++) { System.out.println(ages[i]); } } } ``` ### ArrayDemo5.java ```java package com.zwnsyw.define; public class ArrayDemo5 { public static void main(String[] args) { // 目标:掌握定义数组的方式二:动态初始化数组。 // 1、数据类型[] 数组名 = new 数据类型[长度] int[] ages = new int[3]; // ages = [0, 0, 0] System.out.println(ages[0]); System.out.println(ages[1]); System.out.println(ages[2]); ages[0] = 12; ages[1] = 18; ages[2] = 32; System.out.println(ages[0]); System.out.println(ages[1]); System.out.println(ages[2]); System.out.println("---------------------------"); char[] chars = new char[3]; // [0, 0, 0] System.out.println((int)chars[0]); System.out.println((int)chars[2]); double[] scores = new double[80]; System.out.println(scores[0]); System.out.println(scores[79]); boolean[] flags = new boolean[100]; System.out.println(flags[0]); System.out.println(flags[99]); String[] names = new String[80]; System.out.println(names[0]); System.out.println(names[79]); } } ``` ### ArrayTest4.java ```java package com.zwnsyw.define; public class ArrayTest4 { public static void main(String[] args) { // 目标:完成对数组的元素求和。 // 1、定义一个数组存储5名员工的销售额 int[] money = {16, 26, 36, 6, 100}; // 0 1 2 3 4 // 3、定义一个变量用于累加求和 int sum = 0; // 2、遍历这个数组中的每个数据。 for (int i = 0; i < money.length; i++) { // i = 0 1 2 3 4 sum += money[i]; } System.out.println("员工的销售总额:" + sum); } } ``` ### ArrayTest6.java ```java package com.zwnsyw.define; import java.util.Scanner; public class ArrayTest6 { public static void main(String[] args) { // 目标:完成评委打分的案例。 // 1、定义一个动态初始化的数组,负责后期存储6个评委的打分。 double[] scores = new double[6]; Scanner sc = new Scanner(System.in); // 2、遍历数组中的每个位置,录入评委的分数,存入到数组中去 for (int i = 0; i < scores.length; i++) { // i = 0 1 2 3 4 5 System.out.println("请您输入当前第" + (i + 1) +"个评委的分数:"); double score = sc.nextDouble(); scores[i] = score; } // 3、遍历数组中的每个元素进行求和 double sum = 0; for (int i = 0; i < scores.length; i++) { sum += scores[i]; } System.out.println("选手最终得分是:" + sum / scores.length); } } ``` ## 案例练习 数组综合小题。 ### Test1.java ```java package com.zwnsyw.demo; public class Test1 { public static void main(String[] args) { // 目标:掌握数组元素求最值。 // 1、把颜值数据拿到程序中来,用数组装起来 int[] faceScores = {15, 9000, 10000, 20000, 9500, -5}; // 0 1 2 3 4 5 // 2、定义一个变量用于最终记住最大值。 int max = faceScores[0]; // 3、从数组的第二个位置开始遍历。 for (int i = 1; i < faceScores.length; i++) { // i = 1 2 3 4 5 // 判断一下当前遍历的这个数据,是否大于最大值变量max存储的数据,如果大于,当前遍历的数据需要赋值给max if(faceScores[i] > max ){ max = faceScores[i]; } } System.out.println("最高颜值是:" + max); } } ``` ### Test2.java ```java package com.zwnsyw.demo; public class Test2 { public static void main(String[] args) { // 目标:完成数组反转。 // 1、准备一个数组 int[] arr = {10, 20, 30, 40, 50}; // i j // 2、定义一个循环,设计2个变量,一个在前,一个在后 for (int i = 0, j = arr.length - 1; i < j; i++, j--) { // arr[i] arr[j] // 交换 // 1、定义一个临时变量记住后一个位置处的值 int temp = arr[j]; // 2、把前一个位置处的值赋值给后一个位置了 arr[j] = arr[i]; // 3、把临时变量中记住的后一个位置处的值赋值给前一个位置处 arr[i] = temp; } // 3、遍历数组中的每个数据,看是否反转成功了 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } } ``` ### Test3.java ```java package com.zwnsyw.demo; import java.util.Random; import java.util.Scanner; public class Test3 { public static void main(String[] args) { // 目标:完成随机排名 // 1、定义一个动态初始化的数组用于存储5名员工的工号 int[] codes = new int[5]; // [0, 0, 0, 0, 0] // 0 1 2 3 4 // 2、提示用户录入5名员工的工号。 Scanner sc = new Scanner(System.in); for (int i = 0; i < codes.length; i++) { // i = 0 1 2 3 4 System.out.println("请您输入当前第" + (i + 1) +"个员工的工号:"); int code = sc.nextInt(); codes[i] = code; } // 3、打乱数组中的元素顺序。 // [12, 33, 54, 26, 8] // i index Random r = new Random(); for (int i = 0; i < codes.length; i++) { // codes[i] // 每遍历到一个数据,都随机一个数组索引范围内的值。然后让当前遍历的数据与该索引位置处的值交换。 int index = r.nextInt(codes.length); // 0 - 4 // 定义一个临时变量记住index位置处的值 int temp = codes[index]; // 把i位置处的值赋值给index位置处 codes[index] = codes[i]; // 把index位置原来的值赋值给i位置处 codes[i] = temp; } // 4、遍历数组中的工号输出即可 for (int i = 0; i < codes.length; i++) { System.out.print(codes[i] + " "); } } } ``` ## 数组内存机制 数组在内存里怎么放。 ### ArrayDemo1.java ```java package com.zwnsyw.memory; public class ArrayDemo1 { public static void main(String[] args) { // 目标:掌握普通变量、数组在计算机中的执行原理,Java程序在计算机中的执行过程。 int a = 20; System.out.println(a); int[] arr = new int[]{11, 22, 33}; System.out.println(arr); System.out.println(arr[1]); arr[0] = 44; arr[1] = 55; arr[2] = 66; System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); } } ``` ### ArrayDemo2.java ```java package com.zwnsyw.memory; public class ArrayDemo2 { public static void main(String[] args) { // 目标:认识多个变量指向同一个数组对象的形式,并掌握其注意事项。 int[] arr1 = {11, 22, 33}; // 把int类型的数组变量arr1赋值给int类型的数组变量arr2 int[] arr2 = arr1; System.out.println(arr1); System.out.println(arr2); arr2[1] = 99; System.out.println(arr1[1]); arr2 = null; // 拿到的数组变量中存储的值是null System.out.println(arr2); //System.out.println(arr2[0]); //System.out.println(arr2.length); } } ``` --- ⬅️ [[04-方法工程|方法工程]] 🏠 [[00-管理项目|00-管理项目]] ➡️ [[06-案例练习工程|案例练习工程]]