• Java 二维数组


    多维数组-二维数组

    多维数组我们只介绍二维数组。

    二维数组的应用场景

    比如我们开发一个五子棋游戏,棋盘就是需要二维数组来表示。如图:

    二维数组的使用

    快速入门案例

    TwoDimensionalArray01.java

    请用二维数组输出如下图形

    0 0 0 0 0 0
    0 0 1 0 0 0
    0 2 0 3 0 0
    0 0 0 0 0 0

    代码

    public class TwoDimensionalArray01 {
        public static void main(String[] args) {
            /*
            请用二维数组输出如下图形
            0 0 0 0 0 0
            0 0 1 0 0 0
            0 2 0 3 0 0
            0 0 0 0 0 0
            */
            //什么是二维数组:
            //老韩解读
            //1. 从定义形式上看 int[][]
            //2. 可以这样理解,原来的一维数组的每个元素是一维数组, 就构成二维数组
            int[][] arr = {{0, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 2, 0, 3, 0, 0}, {0, 0, 0, 0, 0, 0}};
            //关于二维数组的关键概念
            //(1)
            System.out.println("二维数组的元素个数=" + arr.length);
            //(2) 二维数组的每个元素是一维数组, 所以如果需要得到每个一维数组的值
            // 还需要再次遍历
            //(3) 如果我们要访问第 (i+1)个一维数组的第 j+1 个值 arr[i][j];
            // 举例 访问 3, =》 他是第 3 个一维数组的第 4 个值 arr[2][3]
            System.out.println("第 3 个一维数组的第 4 个值=" + arr[2][3]); //3
            //输出二维图形
            for (int i = 0; i < arr.length; i++) {//遍历二维数组的每个元素
                //遍历二维数组的每个元素(数组)
                //老韩解读
                //1. arr[i] 表示 二维数组的第 i+1 个元素 比如 arr[0]:二维数组的第一个元素
                //2. arr[i].length 得到 对应的 每个一维数组的长度
                for (int j = 0; j < arr[i].length; j++) {
                    System.out.print(arr[i][j] + " "); //输出了一维数组
                }
                System.out.println();//换行
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    使用方式 1: 动态初始化

    TwoDimensionalArray02.java

    1) 语法: 类型[][] 数组名=new 类型[大小][大小]

    2) 比如: int a[][]=new int[2][3]

    3) 使用演示

    4)二维数组在内存的存在形式(!!画图)

    代码

    public class TwoDimensionalArray02 {
        public static void main(String[] args) {
            //int arr[][] = new int[2][3];
            int arr[][]; //声明二维数组
            arr = new int[2][3];//再开空间
            arr[1][1] = 8;
            //遍历 arr 数组
            for (int i = 0; i < arr.length; i++) {
                for (int j = 0; j < arr[i].length; j++) {//对每个一维数组遍历
                    System.out.print(arr[i][j] + " ");
                }
                System.out.println();//换行
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    使用方式 2: 动态初始化

    先声明:类型 数组名[][];

    TwoDimensionalArray02.java

    再定义(开辟空间) 数组名 = new 类型[大小][大小]

    赋值(有默认值,比如 int 类型的就是 0)

    使用演示

    使用方式 3: 动态初始化-列数不确定

    public class TwoDimensionalArray03 {
        public static void main(String[] args) {
            /*
            看一个需求:动态创建下面二维数组,并输出
            i = 0: 1
            i = 1: 2 2
            i = 2: 3 3 3 一个有三个一维数组, 每个一维数组的元素是不一样的
            */
            //创建 二维数组,一个有 3 个一维数组,但是每个一维数组还没有开数据空间
            int[][] arr = new int[3][];
            for (int i = 0; i < arr.length; i++) {//遍历 arr 每个一维数组
                //给每个一维数组开空间 new
                //如果没有给一维数组 new ,那么 arr[i]就是 null
                arr[i] = new int[i + 1];
                //遍历一维数组,并给一维数组的每个元素赋值
                for (int j = 0; j < arr[i].length; j++) {
                    arr[i][j] = i + 1;//赋值
                }
            }
            System.out.println("=====arr 元素=====");
            //遍历 arr 输出
            for (int i = 0; i < arr.length; i++) {
                //输出 arr 的每个一维数组
                for (int j = 0; j < arr[i].length; j++) {
                    System.out.print(arr[i][j] + " ");
                }
                System.out.println();//换行
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    使用方式 4: 静态初始化

    TwoDimensionalArray04.java

    定义 类型 数组名[][] = {{值 1,值 2…},{值 1,值 2…},{值 1,值 2…}}

    使用即可 [ 固定方式访问 ]

    比如:
    int[][] arr = {{1,1,1}, {8,8,9}, {100}};

    解读

    1.定义了一个二维数组 arr

    2.arr 有三个元素(每个元素都是一维数组)

    3.第一个一维数组有 3 个元素 , 第二个一维数组有 3 个元素, 第三个一维数组有 1 个元素

    案例

    TwoDimensionalArray05.java

    int arr[][]={{4,6},{1,4,5,7},{-2}}; 遍历该二维数组,并得到和

    public class TwoDimensionalArray05 {
        public static void main(String[] args) {
            /*
            int arr[][]={{4,6},{1,4,5,7},{-2}}; 遍历该二维数组,并得到和
            思路
            1. 遍历二维数组,并将各个值累计到 int sum
            */
            int arr[][] = {{4, 6}, {1, 4, 5, 7}, {-2}};
            int sum = 0;
            for (int i = 0; i < arr.length; i++) {
                //遍历每个一维数组
                for (int j = 0; j < arr[i].length; j++) {
                    sum += arr[i][j];
                }
            }
            System.out.println("sum=" + sum);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    二维数组的应用案例

    1)使用二维数组打印一个 10 行杨辉三角 YangHui.java

    public class YangHui {
        public static void main(String[] args) {
            /*
            使用二维数组打印一个 10 行杨辉三角
            1
            1 1
            1 2 1
            1 3 3 1
            1 4 6 4 1
            1 5 10 10 5 1
            规律
            1.第一行有 1 个元素, 第 n 行有 n 个元素
            2. 每一行的第一个元素和最后一个元素都是 1
            3. 从第三行开始, 对于非第一个元素和最后一个元素的元素的值. arr[i][j]
            arr[i][j] = arr[i-1][j] + arr[i-1][j-1]; //必须找到这个规律
            */
            int[][] yangHui = new int[12][];
            for (int i = 0; i < yangHui.length; i++) {//遍历 yangHui 的每个元素
                //给每个一维数组(行) 开空间
                yangHui[i] = new int[i + 1];
                //给每个一维数组(行) 赋值
                for (int j = 0; j < yangHui[i].length; j++) {
                    //每一行的第一个元素和最后一个元素都是 1
                    if (j == 0 || j == yangHui[i].length - 1) {
                        yangHui[i][j] = 1;
                    } else {//中间的元素
                        yangHui[i][j] = yangHui[i - 1][j] + yangHui[i - 1][j - 1];
                    }
                }
            }
            //输出杨辉三角
            for (int i = 0; i < yangHui.length; i++) {
                for (int j = 0; j < yangHui[i].length; j++) {//遍历输出该行
                    System.out.print(yangHui[i][j] + "\t");
                }
                System.out.println();//换行. }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    二维数组使用细节和注意事项

    1) 一维数组的声明方式有:

    int[] x 或者 int x[]

    2) 二维数组的声明方式有:

    int[][] y 或者 int[] y[] 或者 int y[][]

    3) 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如:map[][] 是一个二维数组

    int map [][] = {{1,2},{3,4,5}}

    由 map[0] 是一个含有两个元素的一维数组,map[1] 是一个含有三个元素的一维数组构成,我们也称为列数不等的二维数组

    习题

    已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序,比如:
    [10,12,45,90],添加23后,数组为[10,12,23,45,90]

    public class HomeWork04 {
        public static void main(String[] args) {
            int arr[] = {10, 12, 45, 90};
            int insertNum = 23;
            int index = -1;
            int arrNew[] = new int[arr.length + 1];
            for (int i = 0; i < arr.length; i++) {
                if (insertNum <= arr[i]) {
                    index = i;
                    break;
                }
            }
            if (index == -1) {
                index = arr.length;
            }
            for (int i = 0, j = 0; i < arrNew.length; i++) {
                if (i != index) {
                    arrNew[i] = arr[j];
                    j++;
                } else {
                    arrNew[i] = insertNum;
                }
            }
            arr = arrNew;
            for (int i = 0; i <arr.length ; i++) {
                System.out.print(arr[i] + " ");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    css强制一行,自动裁剪文字,用省略号结尾。
    小公司需要使用微服务架构吗?
    聊聊什么是SpringBoot 的自动装配原理
    单片机汇编代码如何执行
    虚拟偶像主播的大致现状,数字人技术现状
    【苍穹外卖 | 项目日记】第二天
    ThreadLocal原理
    C#把一片非托管内存 拷贝到 另一片非托管内存
    多模态实战视频生成文本:基于VGG与LSTM实现图像对应的描述文本生成任务
    css实现在一定的区域内最大程度的完整展示图片
  • 原文地址:https://blog.csdn.net/weixin_46665411/article/details/126209704