数组工程

ℹ️本篇定位

本篇聚合 IDEA 工程 array-app 的全部源码练习(2025-12 学),按包分节全文收录——当年的学习注释(// 目标:… // 需求:…)原样保留,是最真实的练习轨迹。工程怎么建、模块/包/类怎么管理见 00-管理项目

包含 12 个 .java 练习,目录结构:

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

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

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

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

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

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

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

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

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

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

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

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

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);
    }
}

⬅️ 方法工程 🏠 00-管理项目 ➡️ 案例练习工程