Java之二维数组【一篇搞定】

二维数组

如果把普通的数组(一维数组),看作一个小盒子的话,盒子里面可以存放很多数据,那么二维数组就是像一个大点的盒子,里面可以存放很多小盒子(一维数组)。

1 定义格式

二维数组固定定义格式有2种,具体如下:

格式1:

数据类型[][] 数组名 = new 数据类型[一维长度m][二维长度n];

​ m:表示二维数组的元素数量,即可以存放多少个一维数组​

​ n:表示每一个一维数组,可以存放多少个元素

格式2:

数据类型[][] 数组名 = new 数据类型[一维长度][];

案例展示:

package com.briup.chap04;

import java.util.Arrays;

public class Test091_Basic {
	public static void main(String[] args) {
		//一维长度2,代表这个二维数组里面包含2个元素,每个元素都是一个一维数组
		//二维长度3,代表这个二维数组中元素,类型都是int[3]的一维数组,存放3个int数据
		int[][] arr = new int[2][3];
		/*
			[[I@15db9742

			[[: 		2个中括号就代表的是2维数组
			I: 			数组中存储的数据类型为int
			15db9742: 	十六进制内存地址
		*/
		System.out.println(arr);

		//二维数组的每个元素值(第一维), 对应的是一维数组的内存地址值
		System.out.println(arr[0]);	//[I@15db9742
		System.out.println(arr[1]);	//[I@6d06d69c

		System.out.println("--------------");
		
		//第二种定义格式
		int[][] arr2 = new int[2][];
        
        //输出arr2中2个元素值,默认为null、null
		System.out.println(Arrays.toString(arr2));
		
		//给二维数组的每个元素赋值
		//arr[0] = new int[2];
		//arr[1] = new int[3];
	}
}

2 内存结构

一维数组内存结构:

在这里插入图片描述

二维数组内存结构:

​ 可以把二维数组看成一个一维数组,数组的每个元素对应的内存区域中,存放的是一维数组引用值,具体可参考下面2个图:

在这里插入图片描述在这里插入图片描述

3 元素访问

二维数组中元素的访问和赋值,也是通过数组下标实现的。

书写格式:

二维数组名[一维下标m][二维下标n];

​ 例如:int arr[2][3];

注意:m、n的取值都是[0,length-1],注意不要越界,否则会出现异常ArrayIndexOutOfBoundsException

案例展示

package com.briup.chap04;

public class Test093_Access {
	public static void main(String[] args) {
	    // 数据类型[][] 变量名 = new 数据类型[m][n];
	    int[][] arr = new int[2][3];

	    //获取二维数组元素值并输出
	    System.out.println(arr[0][0]);
	    System.out.println(arr[1][1]);
	    
	    System.out.println("-----------");

	    // 向二维数组中存储元素
	    arr[0][0] = 11;
	    arr[0][1] = 22;
	    arr[0][2] = 33;

	    arr[1][0] = 11;
	    arr[1][1] = 22;
	    arr[1][2] = 33;

	    //arr[2][0] = 3;  数组越界异常
	    
	    // 3. 遍历二维数组,获取所有元素,累加求和
	    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();
	    }
	}
}

4 初始化

​ 二维数组的静态初始化,有点类似一维数组的初始化,具体格式如下:

完整格式 :

数据类型[][] 数组名 = new 数据类型[][]{ {元素1, 元素2...} , {元素1, 元素2...}, ...};

简化格式 :

数据类型[][] 数组名 = { {元素1, 元素2...} , {元素1, 元素2...} ...};

案例

package com.briup.chap04;

public class Test094_Init {
    //封装二维数组遍历方法
	public static void outArray(int[][] arr) {
	    // 遍历二维数组,获取所有元素,累加求和
	    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();
	    }
	} 
	
    public static void main(String[] args) {
        //第一种:完整格式
		int[][] arr1 = new int[][]{{1,2,3},{4,5}};
        outArray(arr1);

        System.out.println("----------");
        
        //第二种:简化格式
        int[][] arr2 = {{11, 22, 33}, {44, 55}};
        outArray(arr2);

        System.out.println("----------");
        
        //第三种:建议从内存角度理解
        int[] arr3 = {11, 33};
        int[] arr4 = {44, 55, 66};
        int[][] array = {arr3, arr4};
        outArray(array);
    }
}

5 综合案例

案例1:二维数组元素遍历

//上面案例已经使用
public static void outArray(int[][] arr) {
    // 遍历二维数组,获取所有元素,累加求和
    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();
    }
} 

案例2:二维数组元素求和

package com.briup.chap04;

public class Test095_Sum {
    public static void main(String[] args) {
        // 1. 定义求和变量,准备记录最终累加结果
        int sum = 0;
        
        // 2. 使用二维数组来存储数据
        int[][] arr = new int[3][];
        arr[0] = new int[]{10};
        arr[1] = new int[]{20,20};
        arr[2] = new int[]{30,30,30};
        //思考,下面一行代码是否正确
        //arr[2] = {30,30,30};
        
        // 3. 遍历二维数组,获取所有元素,累加求和
        for (int i = 0; i < arr.length; i++) {
            for(int j = 0; j < arr[i].length; j++){
                sum += arr[i][j];
            }
        }
        
        // 4. 输出最终结果
        System.out.println(sum);
    }
}

案例3:创建杨辉三角并输出

使用二维数组,打印输出杨辉三角,效果如下:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

具体实现:

package com.briup.chap04;

public class Test095_Triangle {
	public static void main(String[] args) {
        //1.定义2维数组
		int[][] arr = new int[5][5];
		
		//2.给二维数组赋值,得到杨辉三角
		for(int i = 0; i < arr.length; i++) {
			for(int j = 0; j < arr[i].length; j++) {
				//a.j==0  第一列都为 1
				if(j == 0)
					arr[i][j] = 1;
				else if(i == j) {
				//b. 行和列相同  设置1
					arr[i][j] = 1;
				}else if(i > j) {
				//c. 当前位置值 == 上一行相同列 + 上一行前一列
					arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
				}
			}
		}
		
		//3.遍历二维数组,输出杨辉三角
		for(int i = 0; i < arr.length; i++) {
			for(int j = 0; j < arr[i].length; j++) {
				//只输出 左下部分,右上部分0值不输出
				if(i >= j)
					System.out.print(arr[i][j] + "\t");
			}
			System.out.println();
		}
	}
}
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[2\]中的代码实现可以将二维数组转换为一维数组。具体步骤如下: 1. 首先,获取二维数组的行数和列数,分别用m和n表示。 2. 创建一个长度为m*n的一维数组arr。 3. 使用两个嵌套的for循环遍历二维数组,将每个元素按照顺序存入一维数组arr中。 4. 返回一维数组arr。 以下是一个示例的Java代码实现: ```java public int\[\] convertTo1DArray(int\[\]\[\] matrix) { int m = matrix.length; int n = matrix\[0\].length; int\[\] arr = new int\[m * n\]; int index = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { arr\[index++\] = matrix\[i\]\[j\]; } } return arr; } ``` 这样,你就可以使用上述代码将二维数组转换为一维数组了。 #### 引用[.reference_title] - *1* *3* [Java中一维数组和二维数组的详解](https://blog.csdn.net/lu202032/article/details/116768925)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java一维数组与二维数组的转换](https://blog.csdn.net/manqishizhizhu/article/details/124501666)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值