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;
    }
相关文章
|
3月前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
本系列教程笔记详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。若需快速学习Kotlin,建议查看“简洁”系列教程。本期重点介绍了Kotlin与Java的共存方式,包括属性、单例对象、默认参数方法、包方法、扩展方法以及内部类和成员的互操作性。通过这些内容,帮助你在项目中更好地结合使用这两种语言。
58 1
|
3天前
|
存储 监控 Java
JAVA线程池有哪些队列? 以及它们的适用场景案例
不同的线程池队列有着各自的特点和适用场景,在实际使用线程池时,需要根据具体的业务需求、系统资源状况以及对任务执行顺序、响应时间等方面的要求,合理选择相应的队列来构建线程池,以实现高效的任务处理。
77 12
|
19天前
|
存储 Java 程序员
Java的基础概念一
### Java编程基础简介 #### 一、注释 注释用于解释代码,不会参与编译和运行。Java支持三种注释: - **单行注释**:以 `//` 开头。 - **多行注释**:以 `/* ... */` 包围。 - **文档注释**:通常用于生成开发文档。 #### 二、关键字 关键字是被Java赋予特定含义的英文单词,全部小写,且在代码编辑器中有特殊颜色标记。常用的如 `class` 表示定义一个类。
Java的基础概念一
|
9天前
|
Java 数据安全/隐私保护
Java的基础概念(二)
本文介绍了Java编程语言中的运算符和表达式,涵盖算术运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符等。重点讲解了算术运算符的使用,如加减乘除取余,并强调了整数除法和取余的特殊性。同时,详细说明了隐式转换与强制转换的概念及应用场景,以及字符串和字符的拼接规则。通过多个案例演示了不同运算符的实际应用,包括数值拆分、自增自减、三元表达式的使用等。最后简要提及了运算符的优先级,指出小括号具有最高优先级。
|
1月前
|
Java
java do while 的语法怎么用?
java do while 的语法怎么用?
46 3
|
2月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
89 3
|
2月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
73 2
|
2月前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
64 1
|
2月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
47 2
|
3月前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
28 1