Java语法基础学习笔记07-2-二维数组(简单了解-杨辉三角)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

二维数组其实还是一个一维数组,只是他存放的元素又是一个数组。


一、二维数组声明

数据类型[ ][ ] 数组名 = new 数据类型[长度 ][长度 ] ;
举例:

int[][] arr = new int[2][5];
//声明了一个长度为2的二维数组,里面每个元素数组的长度是5

二、二维数组使用

1.静态初始化

声明一个长度为3的二维数组,里面子元素的值如下:

int[][] arr = new int[][]{
	{11,12,13,14,15},
	{21,22,23,24,25},
	{31,32,33,34,35}
};

arr数组的第一个元素是一个数组,值是 {11,12,13,14,15};

2.动态初始化

给定长度,但是不直接给出元素值.
int类型的数组默认初始化值是0
String类型数组默认初始化值是null

		int[][] arr2 = new int[3][3];
        arr2[0][0] = 12;
        arr2[0][2] = 99;
        System.out.println(arr2[0][0]); // 12
        System.out.println(arr2[0][2]); // 99
		String[][] str = new String[3][3];
        System.out.println(str[1][1]); // null

3.访问二维数组元素

1、访问某个指定的元素,一定要给出完整的索引。
参见上一段代码。
2、遍历二维数组(循环嵌套)
第一层for循环先访问二维数组的第一个元素,第二层for循环根据二维数组第一个元素的长度访问二维数组第一个元素里面的所有元素,其他同理。

 public static void main(String[] args) {
        int[][] arr = new int[][]{
                {11, 12, 13, 14, 15},
                {21, 22, 23, 24, 25},
                {31, 32, 33, 34, 35}
        };

        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();
        }
 } 

在这里插入图片描述

三、二维数组内存分析

在这里插入图片描述
一定要注意 数组名 = 数组名 ;这样的操作,这样是把堆内存空间中的同一块new出来的区域指向两个数组,其中任意一个数组修改数组中的值,另一个数组再访问数组时,值都是修改过的。

四、二维数组常见问题

同为一维数组出现的问题,空指针异常和索引越界。

//空指针异常
int arr = new int[5][];
System.out.println(arr[5][0]);//NullPointerException

五、二维数组应用案例

N行的杨辉三角形
杨辉三角中的每一个数等于他头上的元素以及头上元素的左边一个元素的和。

	public static void main(String[] args) {
        int row = 10;
        //声明一个10行长度的二维数组存放杨辉三角的数
        int[][] yangHui = new int[10][];
        //因为每一行的元素都不同,所以只声明二维数组的总长度,但是子元素的长度是变化的,子元素长度应该动态的初始化
        //先根据长度访问二维数组
        for (int i = 0; i < yangHui.length; i++) {
            //数组必须先初始化值才能访问使用,声明二维数组子元素的长度
            yangHui[i] = new int[i + 1];
            //杨辉三角首尾元素赋值都是1
            yangHui[i][0] = 1;
            yangHui[i][i] = 1; // 等价于 yangHui[i][yangHui[i].lenght-1];
            //二维数组子元素初始化完成,就可以访问了
            //首尾元素值已经给出了,所以只需要给中间的元素赋值,从第3行开始
            if (i >= 2) {
                for (int j = 1; j < yangHui[i].length - 1; j++) {
                    yangHui[i][j] = yangHui[i - 1][j - 1] + yangHui[i - 1][j];
                }
            }
        }
        System.out.println("10行的杨辉三角形:");
        //遍历二维数组
        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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值