Java中关于二维数组

目录

二维数组的使用

1.理解

2.二维数组的使用

1)二维数组的声明和初始化

 2)如何调用数组的指定位置的元素

 3)如何获取数组的长度

 4)如何遍历数组

5)数组元素的默认初始化值

6)数组的内存解析[根据图片分析]

相关练习

练习一

练习二

练习三


二维数组的使用

1.理解

对于二维数组的理解,可以看成一维数组array1又作为另一个一维数组的array2的元素而存在。
其实,从数组底层的运行机制来看,其实没有多维数组。

2.二维数组的使用

1)二维数组的声明和初始化

//1)二维数组的声明和初始化
        int[] arr = new int[]{1, 2, 3};//一维数组做对比
        //静态初始化
        int[][] arr1 = new int[][]{{1, 2, 3}, {4, 5}, {6, 7, 8}};
        //动态初始化
        String[][] arr2 = new String[3][2];//外层有3个,3个里面每个里面又有两个【后面可以不写】
        String[][] arr3 = new String[3][];//只指定了行,后面的没有指明。需要赋值之后才能调用

        //也是正确的:放在变量名后或类型后都可以。【注意是二维的】
        int arr4[][] = new int[][]{{1, 2, 3}, {4, 5}, {6, 7, 8, 9}};
        int[] arr5[] = new int[][]{{1, 2, 3}, {4, 5}, {6, 7, 8}};
        int[][] arr6 = {{1, 2, 3}, {4, 5}, {6, 7, 8}};//这样也是可以的[类型推断]

 2)如何调用数组的指定位置的元素

 //2)如何调用数组的指定位置的元素
        System.out.println(arr1[0][1]);//arr1中的第0项的第1个(注意是从0开始的哦)-->2
        System.out.println(arr2[1][1]);//arr1中的第1项的第1个(注意是从0开始的哦)-->由于类型位String,所以输出位null.
        //System.out.println(arr3[1][0]);//运行会报错。【错误类型为空指针(NullPointerException)】
        arr3[1] = new String[4];//先进行赋值
        System.out.println(arr3[1][0]);

 3)如何获取数组的长度

//3)如何获取数组的长度
        System.out.println(arr4.length);//-->3[最外层的]
        System.out.println(arr4[0].length);//-->3[arr4中的第0个]
        System.out.println(arr4[1].length);//-->2[arr4中的第1个]
        System.out.println(arr4[2].length);//-->4[arr4中的第2个]

 4)如何遍历数组

//4)如何遍历数组
        for (int i = 0; i < arr4.length; i++) {
            for (int j = 0; j < arr4[i].length; j++) {
                System.out.print(arr4[i][j]+"  ");
            }
            System.out.println();//换行
        }


5)数组元素的默认初始化值

规定:二维数组分为外层数组元素、内层数组元素

例: int[][] arr = new int[4][3];

外层元素:arr[0],arr[1]...

内层元素:arr[0][0]、arr[0][1]、arr[1][0]...

针对初始化方式一:例如:int[][] arr7 = new int[4][3];

外层元素的初始化值为:地址值

内层元素的初始化值为:与一维数组初始化情况相同

针对初始化方式二:例如:int[][] arr10 = new int[4][];

外层元素的初始化值为:null

内层元素的初始化值为:不能调用,会报错。 

int[][] arr7 = new int[4][3];
        //外层:一个[表示一维,[[表示二维,后面是类型,再后面是@加地址  内层:一维是什么就是什么
        System.out.println("arr7的外层:"+arr7[0]);//是一个地址值[I@1b6d3586;
        System.out.println(arr7[0][0]);//为整型-->0
        System.out.println(arr7);//-->[[I@4554617c

        System.out.println("************");

        float[][] arr8 = new float[4][3];
        System.out.println("arr8的外层:"+arr8[0]);//是一个地址值[F@74a14482;
        System.out.println(arr8[0][0]);//为整型-->0.0
        System.out.println(arr8);//-->[[F@1540e19d

        System.out.println("************");

        String[][] arr9 = new String[4][3];
        System.out.println("arr9的外层:"+arr9[0]);//是一个地址值[Ljava.lang.String;@677327b6;
        System.out.println(arr9[0][0]);//为整型-->null
        System.out.println(arr9);//-->[[Ljava.lang.String;@14ae5a5

        System.out.println("************");

        int[][] arr10 = new int[4][];
        System.out.println(arr10[1]);//-->null(因为后面没有引用,一维为引用类型,所以为null)
        //System.out.println(arr10[1][0]);//或报错空指针,前面没有指针后面就没有

6)数组的内存解析[根据图片分析]

 

相关练习

练习一

获取arr数组中的所有元素和。
      j=0  j=1  j=2  j=3
i=0    3    5    8    -
i=1   12    9    -    -
i=2   7     0    6    4
public static void main(String[] args) {
        int sum = 0;
        int[][] arr = new int[][]{{3, 5, 8}, {12, 9}, {7, 0, 6, 4}};
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                //System.out.print(arr[i][j] + "  ");//查看输出的表是否正确
                sum += arr[i][j];//计算总和
            }
            //System.out.println();
        }
        System.out.println("arr数组中的所有元素和为:" + sum);
    }

练习二

声明:int[] x,y[];

在给x,y变量赋值以后,以下选项允许通过编译的是:

a) x[0]=y;   b) y[0]=x;    c) y[0][0]=x;    d) x[0][0]=y;     e) y[0][0]=x[0];    f) x=y;

/*
[先确定x,y的类型,再看变量之间的赋值规则。]
声明:int[] x,y[];

x是一个一维数组,y是一个二维数组。
在给x,y变量赋值以后,以下选项允许通过编译的是:
a) x[0]=y;      no//y是二维的,x是int型的一个数。
b) y[0]=x;      yes//x是一维的,y是一维一个元素。
c) y[0][0]=x;       no//x是一维的,y是int型的一个数。
d) x[0][0]=y;       no//x的写法都是错的。
e) y[0][0]=x[0];        yes//两边都是int型的一个数。
f) x=y;     no//y是二维的,x是一维的.
*/

练习三

使用二维数组打印一个10行的杨辉三角。
1.第一行有1个元素,第n行有n个元素。
2.每一行的第一个元素和最后一个元素都是1.
3.从第三行开始,对于非第一个元素和最后一个元素的元素
即,num[i][j]=num[i-1][j-1]+num[i-1][j];
【0】1
【1】1   1
【2】1   2   1
【3】1   3   3   1
【4】1   4   6   4   1
...
public static void main(String[] args) {
        //首先声明并初始化二维数组
        int[][] num = new int[10][];
        //【不能在此处定义内层元素,否则出来的值就是一样的了】

        //给数组的元素赋值
        for (int i = 0; i < num.length; i++) {
            num[i] = new int[i + 1];//注意一行不是0而是1,所以加1。

            //给首末元素赋值
            num[i][0] = 1;
            num[i][i] = 1;
            //给非首末元素赋值
            if (i > 1) {
                //注意逻辑,此处要减去最后一项
                for (int j = 1; j < num[i].length - 1; j++) {
                    num[i][j] = num[i - 1][j - 1] + num[i - 1][j];
                }
            }
        }

        //遍历
        for (int i = 0; i < num.length; i++) {
            for (int j = 0; j < num[i].length; j++) {
                System.out.print(num[i][j] + "  ");
            }
            System.out.println();
        }
    }

内容到此结束啦!!!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鲁不吃猪蹄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值