Java-04数组

发布时间 2023-12-12 14:51:32作者: AFEIOOO

tip:[start]程序 = 逻辑 + 数据,数组是存储数据的强而有力的手段。 —— 闫学灿tip:[end]

一维数组

数组的定义

  • 数组的定义方式和变量类似。
  • java中数组的定义[]是写在数组名前面(与c++区分),开辟长度需要new,即面向对象。
public class Main {
    public static void main(String[] args) {
        int[] a = new int[10], b;
        float[] f = new float[33];
        double[] d = new double[123];
        char[] c = new char[21];
    }
}






(2)也可以同时定义多个数组
int[] a = new int[10], b;
(3)不一定只要基本数据类型可以定义数组,String也可以定义数组
String[] a = new String[10];//这个数组里面包含10个String类型的变量

数组的初始化

public class Main {
    public static void main(String[] args) {
		// 含有3个元素的数组,元素分别是0, 1, 2
        int[] a = {0, 1, 2};
		// 含有3个元素的数组,元素的值均为0
        int[] b = new int[3];
		// 字符数组的初始化
        char[] d = {'a', 'b', 'c'};
		// 定义一个数组a
		int[] a;
		// 初始化:将数组a初始化为一个长度为10的数组,表示a里面包含10个int变量
		a = new int[10];
		// 等价于 ⬇ 边定义边初始化
		int[] a = new int[10]
    }
}

访问数组元素

  • 通过下标访问数组。
public class Main {
    public static void main(String[] args) {
        int[] a = {0, 1, 2};  // 数组下标从0开始

        System.out.printf("%d %d %d\n", a[0], a[1], a[2]);

        a[0] = 5;

        System.out.println(a[0]);
    }
}
  • 练习题1:使用数组实现求斐波那契数列的第 N 项。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int[] f = new int[n + 1];
        f[0] = 0;
        f[1] = 1;
        for (int i = 2; i <= n; i ++ )
            f[i] = f[i - 1] + f[i - 2];

        System.out.println(f[n]);
    }
}
  • 练习题2:输入一个 n ,再输入 n 个整数。将这 n 个整数逆序输出。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int[] a = new int[n];
        for (int i = 0; i < n; i ++ )
            a[i] = sc.nextInt();

        for (int i = n - 1; i >= 0; i -- )
            System.out.printf("%d ", a[i]);
    }
}
  • 练习题3:输入 n 个数,将这 n 个数按从小到大的顺序输出。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        for (int i = 0; i < n; i ++ )
            a[i] = sc.nextInt();

        for (int i = 0; i < n; i ++ )
            for (int j = i + 1; j < n; j ++ )
                if (a[i] > a[j]) {
                    int t = a[i];
                    a[i] = a[j];
                    a[j] = t;
                }

        for (int i = 0; i < n; i ++ )
            System.out.printf("%d ", a[i]);
    }
}

多维数组

  • 多维数组就是数组的数组。
public class Main {
    public static void main(String[] args) {
        int[][] a = new int[3][4]; // 大小为3的数组,每个元素是含有4个整数的数组。
        int[][][] b = new int[10][20][30]; // 将所有元素的初值为0
        // 大小为10的数组,它的每个元素是含有20个数组的数组
        // 这些数组的元素是含有30个整数的数组
    }
}
public class Main {
    public static void main(String[] args) {
        int[][] a = {           // 三个元素,每个元素都是大小为4的数组
            {0, 1, 2, 3},       // 第1行的初始值
            {4, 5, 6, 7},       // 第2行的初始值
            {8, 9, 10, 11}      // 第3行的初始值
        };


        for (int i = 0; i < 4; i ++ )  // 将第一行全部变成0
            a[0][i] = 0;

        for (int i = 0; i < 3; i ++ ) {  // 输出二维数组
            for (int j = 0; j < 4; j ++ ) {
                System.out.printf("%d ", a[i][j]);
            }
            System.out.println();
        }
    }
}

数组的范围遍历

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int[][] a = {
            {0, 1, 2, 3},
            {4, 5, 6, 7},
            {8, 9, 10, 11},
        };

        for (int[] row: a) {  // 范围遍历
            for (int x: row)  // 范围遍历
                System.out.printf("%d ", x);
            System.out.println();
        }
    }
}

常用API

  • 属性length:返回数组长度,注意不加小括号
  • Arrays.sort():数组排序
  • Arrays.fill(int[] a, int val):填充数组
  • Arrays.toString():将数组转化为字符串
  • Arrays.deepToString():将多维数组转化为字符串
  • 数组不可变长,使用Arrays需要import java.util.Arrays