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

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

说明

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

20210611141607162.png

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

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

20210611142845669.png

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

20210611145859904.png


  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开始!

20210611150454388.png


案例

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

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


20210611160632451.png

  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;
    }
相关文章
|
18天前
|
Java Apache Maven
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
48 6
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
|
8天前
|
存储 Java
【编程基础知识】 分析学生成绩:用Java二维数组存储与输出
本文介绍如何使用Java二维数组存储和处理多个学生的各科成绩,包括成绩的输入、存储及格式化输出,适合初学者实践Java基础知识。
37 1
|
10天前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
28 15
|
4天前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
15 3
|
9天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
21 5
|
14天前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
34 2
|
1月前
|
Java 数据安全/隐私保护
java之基本语法
java之基本语法
23 6
|
12天前
|
Java C#
Java的监听处理事件--小球移动案例
Java的监听处理事件--小球移动案例
9 0
|
1月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
1月前
|
存储 Java 容器
Java 基础语法
Java是一种面向对象的编程语言,其基础语法包括类和对象、方法、变量、控制流语句、继承和多态以及异常处理。代码需写在类中,`main()`方法是程序入口,变量用于存储数据,控制流语句控制程序执行流程,继承和多态增强代码灵活性,异常处理保证程序稳定性。掌握这些知识可帮助您编写简单的Java程序。