09-二维数组

二维数组介绍

二维数组可以被看作数组的数组。实质上是由多个一维数组所组成的,其各个一维数组的长度可以相同,也可以不相同。

在Java中,二维数组也要求其内部的一维数组具有相同的数据类型,即只能储存同一种数据类型,不能出现多种数据类型。

二维数组的声明和创建

数组定义格式:

a) 数据类型[][] 数组名; 例如 int[][] array//首选的方法

b) 数据类型 数组名[][]; 例如 int array[][]//不是首选的方法,但效果相同

c) 数据类型[] 数组名[]; 例如 int[] array[]; //不是首选的方法,但效果相同

二维数组的初始化

a) 动态初始化:在声明的同时创建数组对象

格式:数据类型[][] 数组名 = new 数据类型[二维数组的长度][一维数组的长度];

例如 int[][] arr = new int[2][3];  arr数组里面有两个一维数组,每个一维数组里面有三个元素

public class TwoDimensionalArray02{
    public static void main(String[] args){

        //动态初始化:在声明的同时创建数组对象
        //格式:数据类型[][] 数组名 = new 数据类型[二维数组的长度][一维数组的长度];

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

        //遍历arr的每个一维数组
        for(int i = 0; i < arr.length; i++){
            //遍历一维数组的每个元素(数组)
            for(int j = 0; j < arr[i].length; j++){
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println("");
        }
    }
}

b) 动态初始化:先声明再定义数组对象(开辟数组空间)

格式:数据类型[][] 数组名 = new 数据类型[二维数组的长度][];

例如 int[][] arr new int[2][];  arr数组里面有两个一维数组,但每个一维数组里面的元素个素可以是不一样的

public class TwoDimensionalArray03{
    public static void main(String[] args){

        /**
         * 动态初始化:先声明再定义数组对象(开辟数组空间)
         * 格式:数据类型[][] 数组名 = new 数据类型[二维数组的长度][];
         *
         * 有一个需求:动态地创建一个二维数组,并输出
         *
         * i = 0: 1
         * i = 1: 2  2
         * i = 2: 3  3  3
         *
         * 一共有三个一维数组,每个一维数组的元素是不一样的
         *
         */
        
        //arr数组里面有两个一维数组,但每个一维数组里面的元素个素可以是不一样的
        int[][] arr = new int[3][];

        //遍历arr的每个一维数组
        for(int i = 0; i < arr.length; i++){
            //这里需要注意,要给每个一维数组开辟空间 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;
            }
        }

        //输出,遍历
        for(int i = 0; i < arr.length; i++){
            for(int j = 0; j < arr[i].length; j++){
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println("");
        }

    }
}

c) 静态初始化:在声明的同时对数组进行赋值

完整格式为:数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}};

简化格式为:数据类型[][] 数组名 = {{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}};

public class TwoDimensionalArray04{
    public static void main(String[] args){

        //静态初始化:在声明的同时对数组进行赋值
        //完整格式为:数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}};
        //简化格式为:数据类型[][] 数组名 = {{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}};

        int[][] arr = {{1,1,1},{8,8,9},{10}};

        //这里需要注意,二维数组,只能存储多种同一类型的数组,否则会数据类型不匹配
        //int[][] arr2 = {{1,1,1},{8,8,9},10};    错误: 不兼容的类型: int无法转换为int[]

        //int[][] arr3 = {{1,1,1},{2.0,4.0,8.0}}; 错误: 不兼容的类型: 从double转换到int可能会有损失

        //int[][] arr4 = {{1,1,1},{"a","b","c"}}; 错误: 不兼容的类型: String无法转换为int
        
    }
}

二维数组的内存图

 

练习:使用二维数组打印一个10行 杨辉三角

public class YangHui{
    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. 第一行有1个元素,第n行有n个元素
         * 2. 每一行的第一个元素和最后一个元素都是1
         * 3. 从第三行开始,对于非第一个元素和最后一个元素的元素值 arr[i][j]
         * arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
         * 
         */
        
        //动态创建一个二维数组
        int[][] arr = new int[10][];

        //使用外循环,给杨辉三角数组赋值
        for(int i = 0; i < arr.length; i++){
            //这里需要给每个一维数组开辟空间
            arr[i] = new int[i+1];

            //使用循环,给每个一维数组赋值
            for(int j = 0; j < arr[i].length; j++){
                //判断是否是第一个或最后一个元素
                if(j == 0 || j == (arr[i].length-1)){
                    arr[i][j] = 1;
                }else{
                    arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
                }
            }
        }

        //输出,遍历
        for(int i = 0; i < arr.length; i++){
            for(int j = 0; j < arr[i].length; j++){
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println("");
        }
    }
}

 

posted @ 2023-07-22 10:21  马铃薯1  阅读(10)  评论(0编辑  收藏  举报