个人技术分享

序言

数组是用来存储一批同种类型数据的内存区域。

数组的定义

静态初始化数组

定义数组的时候直接给数组赋值。
格式:

数据类型[] 数组名 = 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工具的使用

  1. 在需要控制的代码行左侧,点击一下,形成断点
  2. 选择使用Debug方式启动程序,启动后程序会在断点暂停
  3. 控制代码一行一行的往下执行