多维数据的使用(二)

动态初始化

如果二维数组的每一个数据,甚至是每一行的列数,需要后期单独确定,那么就只能使用动态初始化方式了。动态初始化方式分为两种格式:

格式1:规则二维表:每一行的列数是相同的

//(1)确定行数和列数
元素的数据类型[][] 二维数组名 = new 元素的数据类型[m][n];
    //其中,m:表示这个二维数组有多少个一维数组。或者说一共二维表有几行
    //其中,n:表示每一个一维数组的元素有多少个。或者说每一行共有一个单元格

//此时创建完数组,行数、列数确定,而且元素也都有默认值

//(2)再为元素赋新值

二维数组名[行下标][列下标] = 值;

举例:

int[][] arr = new int[3][2];
  1. 定义了名称为arr的二维数组
  2. 二维数组中有3个一维数组
  3. 每一个一维数组中有2个元素
  4. 一维数组的名称分别为arr[0], arr[1], arr[2]
  5. 给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;

格式2:不规则:每一行的列数不一样

//(1)先确定总行数
元素的数据类型[][] 二维数组名 = new 元素的数据类型[总行数][];

//此时只是确定了总行数,每一行里面现在是null

//(2)再确定每一行的列数,创建每一行的一维数组
二维数组名[行下标] = new 元素的数据类型[该行的总列数];

//此时已经new完的行的元素就有默认值了,没有new的行还是null

//(3)再为元素赋值
二维数组名[行下标][列下标] = 值;

举例:

int[][] arr = new int[3][];
  1. 二维数组中有3个一维数组。
  2. 每个一维数组都是默认初始化值null (注意:区别于格式1)
  3. 可以对这个三个一维数组分别进行初始化:arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[2];
  4. 注:int[][]arr = new int[][3]; //非法

练习

    public static void test2WAr() {

        int[][] arr = new int[5][];//确定行,不确定列
        //确定列
        for (int i = 0; i < arr.length; i++) {
              /*
            arr[0] 的列数是1
            arr[1] 的列数是2
            arr[2] 的列数是3
            arr[3] 的列数是4
            arr[4] 的列数是5
            */
            arr[i] = new int[i + 1];
        }

        //确定元素值
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = i + 1;
            }
        }
        //遍历
        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 2 
3 3 3 
4 4 4 4 
5 5 5 5 5 

数组的长度和角标

二维数组的长度/行数:二维数组名.length

二维数组的某一行:二维数组名[行下标],此时相当于获取其中一组数据。它本质上是一个一维数组。行下标的范围:[0, 二维数组名.length-1]。此时把二维数组看成一维数组的话,元素是行对象。

某一行的列数:二维数组名[行下标].length,因为二维数组的每一行是一个一维数组。

某一个元素:二维数组名[行下标][列下标],即先确定行/组,再确定列。

 

        int[][] scores = {
                {85, 96, 85, 75},
                {99, 96, 74, 72, 75},
                {52, 42, 56, 75}
        };

        System.out.println(scores); //地址值
        System.out.println("一共有 " + scores.length + " 数组组成!!"); //长度

        System.out.println(scores[0]); //地址值
        System.out.println(scores[1]); //地址值
        System.out.println(scores[2]); //地址值

        System.out.println("第一组有 " + scores[0].length + " 个元素");
        System.out.println("第二组有 " + scores[1].length + " 个元素");
        System.out.println("第三组有 " + scores[2].length + " 个元素");
        // System.out.println("第四组有 " + scores[4].length+ " 个元素");ArrayIndexOutOfBoundsException

        System.out.println(scores[0][0]);
        System.out.println(scores[0][1]);
        System.out.println(scores[0][2]);
        System.out.println(scores[0][3]);

二维数组的遍历

格式:

for(int i=0; i<二维数组名.length; i++){ //二维数组对象.length
    for(int j=0; j<二维数组名[i].length; j++){//二维数组行对象.length
        System.out.print(二维数组名[i][j]);
    }
    System.out.println();
}

举例:

        System.out.println("一共有" + scores.length + "组成绩.");
        for (int i = 0; i < scores.length; i++) {
            System.out.println("第" +( i + 1) + "组有 " + scores[i].length + " 个元素:");
            for (int j = 0; j < scores[i].length; j++) {
                System.out.print(scores[i][j] + "\t");
            }
            System.out.println();
        }
posted @ 2023-04-10 06:26  晓枫的春天  阅读(47)  评论(0编辑  收藏  举报