• 二维数组的认识和使用


    二维数组

    什么是二维数组

    正常的一维数组为:{1,2,3,4,5}
    二维数组就是一维数组中的每个元素又为另一个一维数组列如:int [] [] arr2= {{1,2,3},{4,5,6,}.{7,8,9}};
    这样就是一个二维数组 那么二维数组arr2的第一个元素就是{1,2,3} arr2的1号下标就是{4,5,6}
    定义:由多个同数据类型一维数组作为元素的叫做二维数组

    二维数组的遍历

    要想输出二维数组的每一个具体值与遍历一维数组不同,需要嵌套循环。也就是循环两次,第一次循环输出一维数组的下标,第二次循环利用一维数组的下标输出二维数组的下标,以达到输出二维数组具体值得目的
    例如使用二维数组输出如下图形
    0 0 0 0 0 0
    0 0 1 0 0 0
    0 2 0 3 0 0
    0 0 0 0 0 0
    思路:
    1·首先定义一个二维数组 上面每一行的值就是二维数组每个元素
    int [] [] arr2 ={{0,0,0,0,0,0}{0,0,1,0,0,0}{0,2,0,3,0,0}{0,0,0,0,0,0}};
    2·遍历二维数组的下标,然后在循环的内部再添加一个for循环遍历每个一维数组的下标,并且添加打印语句即可
    for(int a = 0;a for(int b =0;b System.out.print(arr2[a][b]+" ");
    }
    System.out.println();//每打印完一行换行
    }

    int [] [] arr2 ={{0,0,0,0,0,0},{0,0,1,0,0,0},{0,2,0,3,0,0},{0,0,0,0,0,0}};
    		for(int a = 0;a<arr2.length;a++){
    			for(int b = 0;b<arr2[a].length;b++){
    				System.out.print(arr2[a][b]+" ");
    				}
    			System.out.println();//每输出完一行换行
    		}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    二维数组的初始化与内存分析

    二维数组与一维数组一样可以静态初始化和动态初始化

    静态初始化
    int [][] arr ={{1,2,3},{1,2,3,},{1,2,3}};

    动态初始化

    int [][]arr2;//声明
    arr2 =new int [2] [3]//分配空间
    赋值 初始化是0

    从上面可以看到静态初始化没有规定每个元素的长度,而动态初始化规定了二维数组的长度和元素的长度但并没有赋值
    在数组中一旦创建并且分配了内存,数组中的值会自动初始化,数据类型的初始化为0,所以就算没有赋值,也可以输出arr2
    arr2输出为: 规定了arr2数组长度为2 每个元素的长度为3
    000
    000
    在内存中二维数组与一维数组一样也是采用引用传递,但二维数组中在堆中保存的不是直接的值而是一维数组的地址,然后通过一维数组的地址再去找到具体的值
    如果要赋值得话也是根据地址找到具体的空间进行赋值 列如arr2[1][1]=8;
    如图所示:
    在这里插入图片描述

    二维数组的不等列数组

    在上面的二维数组中每个数组中的一维数组都是相等的长度,那么在实际的开发中可能会应用到不等长度的二维数组
    列如
    1
    2 2
    3 3 3
    如上所示 第一个元素只有一个空间 (不是表示后面还有两个值是0)第二个元素只有2个值两个空间以此类推
    我们可以使用动态初始化和循环来实现
    数组的生成分为以下几个步骤
    声明 分配二维数组的空间 分配一维数组的空间 赋值
    那么我们先声明
    int [] [] arr;
    由于我们要创建的二维数组每个元素的长度不同所以不能一下子把二维数组和一维数组的空间都定义了,所以只定义固定的二维数组的长度
    int [] []arr=new int [3] []//只分配了二维数组的空间 没有分配以为数组的空间
    此时这个数组是没有具体的值的,arr指向的是三个没有地址的空间也就是null 因为没有分配一维数组的空间
    由于要创建的不等列二维数组的元素长度是依次递增的所以我们可以使用for循环来分配一维数组的空间
    for(int a=0;a arr[a] = new int[a+1]//这里是给二维数组的元素开辟一个int类型的a+1长度的数组空间循环下去就是依次开辟
    //开辟完空间之后就可以开始给每个元素赋值了 创建内层循环
    for(int b=0;b arr[a][b]=[a+1];//赋值
    }
    }
    这样就完成了一个不等列数组的创建

    public static void main(String[]args){
    		int [][]arr;
    		arr =new int[3][];
    		for (int a=0;a<arr.length ;a++ ) {
    			arr[a] = new int[a+1];
    			for (int b=0;b<arr[a].length ;b++ ) {
    				arr[a][b]=a+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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    练习

    遍历下方二维数组,并得到和

    //遍历下方二维数组并得到和
    		int sum=0;//和变量
    		int [][] arr ={{4,6}, {1,4,5,7},{-2}};
    		for (int a=0;a<arr.length ;a++ ) {
    			for (int b=0;b<arr[a].length ;b++ ) {
    				System.out.print(arr[a][b]);
    				sum+=arr[a][b];
    			}
    			System.out.println();//换行
    		}
    		System.out.print("和等于="+sum);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

  • 相关阅读:
    PostgreSQL查询表操作
    岩藻多糖-聚乙二醇-刀豆球蛋白A,ConcanavalinA-PEG-Fucoidan,刀豆球蛋白A-PEG-岩藻多糖
    pytorch实现yolov1
    Qt | 内容边距(ContentsMargins)、间距(spacing)和 QSpacerItem 类
    湘南学院2023级成考新生课程学习安排及成绩评定标准
    java后端开发热部署工具Springloaded
    [第一篇]——跟我学习Docker 教程
    React Native 之 expo-cli使用 (二十四)
    SpringBoot 自定义注解异步记录复杂日志
    Unity 实现原神中的元素反应
  • 原文地址:https://blog.csdn.net/WINorYU/article/details/126368416