Java中二维数组是什么?如何使用?概念!语法!案例!三方面讲解。

说明

二维数组本质上是以数组作为数组元素的数组,即数组的数组。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。
在这里插入图片描述

如何去理解数组中的数组呢?

  • 二维数组的0下标,中存放了一个数组,1,2,下标亦是如此,这整个大的数组就是一个二维数组。这时小伙伴们应该会有疑问,既然数组中可以存放数组,那可不可以有三维数组?答案是 有的!,不过通常来讲二维数组已经足够满足我们开发需求了。
    在这里插入图片描述

不会java8的可以先看我之前写过的一篇文章:JDK都出到16了,8还没有掌握吗?一篇文章打包带走Java8新特性

语法

  • 语法与初始化方法基本与普通数组一样。
  1. 定义一个二维数组:类型 数组名[常量表达式][常量表达式] int arr [][]
  2. 静态初始化:类型 数组名 = {{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}…}; int arr[][]={{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};
  3. 动态初始化:类型 数组名 = new 类型 [行][列] int arr [][] = new int [11][11];

了解完语法之后我们在回到上面那张图,清楚的可以看出这是一个三行五列的二维数组。那么问题又来了,这样结构的数组我要怎么给它里面放值呢?

  1. 想要往里面放值我们首先结合上方语法定义第一个三行五列的二维数组并输出到控制台。
public static void main(String[] args) {
	    int arr [][] = new  int[3][5];
		Arrays.stream(arr).forEach(arrs-> {
			Arrays.stream(arrs).forEach(a-> System.out.printf("%d\t",a));
			System.out.println();
		});
}		

在这里插入图片描述

  1. 输出后我们可以清晰的看出来,它的行和列对应的值,既然定义如此赋值也当如此,下面我们给第三行第二列赋值为5。
		int arr [][] = new  int[3][5];
		arr[2][1]=5;
		Arrays.stream(arr).forEach(arrs-> {
			Arrays.stream(arrs).forEach(a-> System.out.printf("%d\t",a));
			System.out.println();
		});

注意:别忘了数组的下标从0开始!

在这里插入图片描述


案例

  1. 二维数组求和
public static void main(String[] args) {
		int [][] arr ={{1,2},{1,2,3},{1,2,3,4}};
		
		//求和
		int sum=0;
		for (int i=0;i<arr.length;i++){
			for (int j=0;j<arr[i].length;j++){
				sum+=arr[i][j];
			}
		}
		System.out.println(sum);
}

这样看起来很不直观,没有关系,我们来分析一下循环体,第一次进入循环 i0j 也为 0 我们可以通过 arr[i][j] 拿到第0行第0列的值,为1,第二次循环我们 i 依旧为 0 但是我们的 j1 ,我们再次通过 arr[i][j] 可以拿到第 0行第 1 列的值为 2 ,因为我们二维数组的第 0 行的数组就两个值,接下来我们要遍历第 1 行数据了,此时我们的 i1 因为重新进入循环体了 j 也会从 0 开始 j 既然等于 0 我们会得到第 1 行第 0 列的值,为 1 以此类推并相加,我们就拿到最终的结果了。
在这里插入图片描述

  1. 能够使用二维数组存储班上三个学生两门功课的考试成绩并求出每个学生总分,平均分,最高分,最低分。

初始化一个三行两列的二维数组。

    public static void main(String[] args) {
        //初始化一个二维数组
        int student[][] =new int[3][2];
        student[0][0]=60;
        student[0][1]=80;
        student[1][0]=90;
        student[1][1]=79;
        student[2][0]=80;
        student[2][1]=50;
        
        
        //每个学生总分
        getSum(student);
        //每个学生平均分
        getAvg(student);
        //每个学生的最高分
        getMax(student);
        //每个学生的最低分
        getMin(student);
    }

每个学生的课程总分

    public static int [] getSum(int[][] student){
        int[] studentSum=new int[student.length];
        for (int i=0;i<student.length;i++){
            int sum=0;
            for (int j=0;j<student[i].length;j++){
                 sum+=student[i][j];
            }
            studentSum[i]=sum;
        }
        return studentSum;
    }

每个学生的课程平均分

   public static int [] getAvg(int[][] student){
        int[] studentAvg=new int[student.length];
        for (int i=0;i<student.length;i++){
            int age=0;
            for (int j=0;j<student[i].length;j++){
                age+=student[i][j];
            }
            studentAvg[i]=age/student[i].length;
        }
        return studentAvg;
    }

每个学生的课程最高分

   public static int [] getMax(int[][] student){
        int[] studentMax=new int[student.length];
        for (int i=0;i<student.length;i++){
            int max = student[i][0];
            for (int j=0;j<student[i].length;j++){
                if (max<student[i][j]){
                    max=student[i][j];
                }
            }
            studentMax[i]=max;
        }
        return studentMax;
    }

每个学生的课程最低分

  public static int [] getMin(int[][] student){
        int[] studentMin=new int[student.length];
        for (int i=0;i<student.length;i++){
            int min = student[i][0];
            for (int j=0;j<student[i].length;j++){
                if (min>student[i][j]){
                    min=student[i][j];
                }
            }
            studentMin[i]=min;
        }
        return studentMin;
    }

一键三连加关注,就是对作者最大的支持 !在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

虫链Java Library

谢谢您的支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值