二维数组

二维数组

一、定义

  • 二维数组——二维数组的每个元素是一个一维数组

二、二维数组的使用

使用方式一:动态初始化

  • 语法
/*
二维数组语法
数据类型[][] 数组名 = new 数据类型[大小][大小];

1、第一个"大小"表示:二维数组的长度,即二维数组里有几个一维数组
2、第二个"大小"表示:每一个一维数组的大小
*/

//二维数组有两个一维数组,每个一维数组有三个元素
int[][] arr = new int[2][3];
int arr1[][] = new int[2][3];

使用方式二:动态初始化

  • 语法
/*
1、先声明:数据类型 数组名[][];
2、再定义(开辟空间):数组名 = new 数据类型[大小][大小];
3、赋值(有默认值)
*/

int arr[][];//声明二维数组
arr = new int[2][3];//再开辟空间

使用方式三:动态初始化——列数不确定

  • 列数不确定——每个一维数组的元素个数不一样
public class Main {
    public static void main(String[] args) {
        //动态初始化————列数不确定
        /*
        动态创建下面的二维数组,并输出:
        i/j     j = 0   j = 1   j = 2
        i=0       1
        i=1       2       2
        i=2       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;
            }
        }
    }
}

使用方式四:静态初始化

  • 语法
/*
数据类型 数组名[][] = {{值1,值2,...}{值1,值2,...}}
*/
int arr[][] = {{1,2,3},{4,45,6}};
//解读:
/*
1、定义了一个二维数组arr
2、arr有两个元素(每个元素都是一个一维数组)
3、第一个一维数组有三个元素,第二个一维数组有三个元素
*/

三、二维数组在内存的存在形式(三维四维类推)

  • 遵循一维数组引用存放规则

  • 第一步:找到arr[1]的地址
  • 第二步:再到一维数组里面找到arr[1][1]这个元素,把0改成8

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

  1. 一维数组的声明方式有:int[] x 或 int x[]
  2. 二维数组的声明方式有:int[][] y 或 int y[][] 或 int[] y[]
  3. 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同
//比如map是一个二维数组
int[][] map = {{1,2,3},{1}};
//map[0]是一个含有三个元素的一维数组
//map[1]是一个含有一个元素的一维数组
//这样的二维数组我们也称为列数不等的二维数组

五、二维数组案例

二维数组的遍历

public class Main {
    public static void main(String[] args) {
        int[][] arr = {{1,1,1},{2,2,2}};
        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]+" ");//arr[i][j] 第 i+1 个一维数组的第 j+1 个值
            }
            System.out.println();
        }
    }
}

杨辉三角

  • 使用二维数组打印一个10行的杨辉三角
public class Main {
    public static void main(String[] args) {
        //杨辉三角
        /*
        1
        1 1
        1 2 1
        1 3 3 1
        1 4 6 4 1
        1 5 10 10 5 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[10][];
        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]+" ");
            }
            System.out.println();
        }
    }
}

本文章使用limfx的vscode插件快速发布