java二维数组

二维数组

二维数组可以看成以数组为元素的数组。

还可以有二维、三维、甚至更多维数组,但是实际开发中用 的非常少。最多到二维数组(学习容器后,我们一般使用容器,二维数组用的都很少)。

  1. 数据类型[] [] 变量名; int[] [] arr; 推荐

  2. 数据类型 变量名[] []; int arr[] [];

  3. 数据类型[] 变量名[]; int[] arr[];

二维数组的声明

动态初始化一个二维数组

格式:数据类型[] [] 变量名 = new 数据类型[m] [n];

范例: int[] [] arr = new int[2] [3];

定义了一个二维数组 二维数组中有2个元素(一维数组) 每一个一维数组有3个元素(int类型数据)

适合开始知道数据的数量,但是不确定具体元素值的业务场景

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[][] a = new int[3][]; // 动态初始化一个二维数组
// a[0] = {1,2,5}; //错误,没有声明类型就初始化
        a[0] = new int[]{1, 2};
        a[1] = new int[]{2, 2};
        a[2] = new int[]{2, 2, 3, 4};
        System.out.println(a[2][3]);
        System.out.println(Arrays.toString(a[0]));
        System.out.println(Arrays.toString(a[1]));
        System.out.println(Arrays.toString(a[2]));
    }
}
public class Test {
    public static void main(String[] args) {
// Java中多维数组的声明和初始化应按从低维到高维的顺序进行
        int[][] a = new int[3][]; // 动态初始化一个二维数组
        a[0] = new int[2];
        a[1] = new int[4];
        a[2] = new int[3];
// int a1[ ][ ]=new int[ ][4];//非法
    }
}

二维数组的静态初始化

格式:数据类型[] [] 变量名 = new 数据类型[] []{{元素…},{元素…},{元素…},…};

范例: int[ ] [ ] arr = new int[] []{{1,2,3},{4,5,6},{7,8,9}};

定义了一个二维数组 二维数组中有三个元素(一维数组) 每一个一维数组有三个元素(int类型数据)

注意:一维数组中元素的个位可以是不同的 比如: int[] [] arr = new int[] []{{1,2,3},{4,5},{6,7,8,9}}; // new int[][] 为二维数组类型开辟一个空间

同样,针对静态初始化,二维数组也给出了简化格式:

简化格式数据类型 [ ][ ] 变量名 = {{元素…},{元素…},{元素…},… };

范例: int [ ] [ ]arr ={{1,2,3},{4,5,6},{7,8,9}};

适合一开始就能确定元素值的业务场景

public class Test {
    public static void main(String[ ] args) {
        int[ ][ ] a = { { 1, 2, 3 }, { 3, 4 }, { 3, 5, 6, 7 } };
        System.out.println(a[2][3]);
    }
}

二维数组内存图

java二维数组

二维数组常见操作—-遍历

/*
需求:已知一个二维数组 arr = {{1,2,3},{4,5,6},{7,8,9}}; 请把元素在控制台输出
*/
public class ArrayTest {
    public static void main(String[] args) {
//定义二维数组,并进行静态初始化
        int[][] arr = {
                {1, 2, 3},
                {4, 5, 6},
                {7, 8, 9}
                        };
//获取数据
        for (int i = 0; i < arr.length; i++) { // 取出二维数组中的一维数组
//arr[i]
            for (int j = 0; j < arr[i].length; j++) { // 依次取出每个二维数组中的一维数组的元素
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}

① 循环嵌套:循环语句中嵌套循环语句

② 通过外层循环可以得到一维数组

③ 在通过内存循环可以得到每一个二维数组元素

二维数组常见操作—元素打乱

/*已知二维数组 arr = {{1,2,3},{4,5,6},{7,8,9}};用程序实现把数组中的元素打乱,并在控制台输出打乱后的数组元素

*/

import java.util.Random;
class Test11 {
    public static void main(String[] args) {
//定义二维数组,并进行静态初始化
        int[][] arr = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
//创建随机数对象
        Random r = new Random();
//遍历二维数组,进行元素打乱
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
//arr[i][j]
                int x = r.nextInt(arr.length);
                int y = r.nextInt(arr[x].length);
//元素交换
                int temp = arr[i][j];
                arr[i][j] = arr[x][y];
                arr[x][y] = temp;
            }
        }
        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();
        }
    }
}

这里的思路和前面一维数组中的元素打乱是一样的,也是要随机产生二维数组中元素的索 引,并进行元素交换。

只不过呢,二维数组元素的索引是两个值,所以,这里要产生两个随机数。

使用Arrays来操作二维数组

使用二维数组保存表格数据

import java.util.Arrays;
class Test11 {
    public static void main(String[] args) {
        // 创建对象类型的一维数组
        Object[] a1 = {1001, "高淇", 18, "讲师", "2-14"};
        Object[] a2 = {1002, "高小七", 19, "助教", "10-10"};
        Object[] a3 = {1003, "高小琴", 20, "班主任", "5-5"};
        // 动态初始化一个对象类型的二维数组 存3个一维数组
        Object[][] emps = new Object[3][];
        // 手动把上面创建的一维数组加入到二维数组中
        emps[0] = a1;
        emps[1] = a2;
        emps[2] = a3;
        // 使用arrays类快速获取数组中的数据 ,省去了两个for嵌套循环
        System.out.println(Arrays.toString(emps[0]));
        System.out.println(Arrays.toString(emps[1]));
        System.out.println(Arrays.toString(emps[2]));
    }
}

Original: https://www.cnblogs.com/e-link/p/16648253.html
Author: link-零
Title: java二维数组

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/615889/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • ENDIAN的由来及BIG-EDIAN 和LITTLE-ENDIAN(转)

    在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送…

    Java 2023年6月6日
    091
  • 一个小练习!

    从键盘输入N个数字,输出这个数中大于其平均值的数! 请食用! import java.util.Scanner; public class Test01 { public stat…

    Java 2023年6月5日
    066
  • nginx重新整理——————http请求的11个阶段中的content阶段[十八]

    前言 简单介绍一下content 阶段。 正文 下面介绍一下root和alias。 这个前面其实就提交过了,这里再说明一下。 功能都是一样的:将url映射为文件路径,以返回静态文件…

    Java 2023年5月30日
    064
  • Spring Cloud 配置application.yml与bootstrap.yml快速入门

    一、概述 _Spring Cloud Config_是 Spring 的客户端/服务器方法,用于跨多个应用程序和环境存储和提供分布式配置。 此配置存储理想地在 Git_版本控制下进…

    Java 2023年5月30日
    085
  • IDEA 设置快捷键上下整行

    快捷键上下整行 点击新增快捷键 posted @2022-09-16 20:25 一蓑烟雨任平生。。 阅读(8 ) 评论() 编辑 Original: https://www.cn…

    Java 2023年6月7日
    083
  • Mina的IoBuffer改造成Netty的ByteBuff

    背景:部标GPS通讯底层全部改造成基于Netty服务器实现的,现将Mina的依赖移除,修改过程中有用到缓冲区的读写。现做了如下修改: 原有基于Mina的IoBuffer对字节读写封…

    Java 2023年6月9日
    067
  • 1.18(设计模式)状态模式

    状态模式:当对象状态改变时行为也随之改变,看起来就像是这个类发生了改变。 首先对象有状态,行为由状态决定。 假设现在有一个游戏角色,有正常状态、加速状态、减速状态、眩晕状态。 游戏…

    Java 2023年6月8日
    073
  • noi.ac#309 Mas的童年(子集乱搞)

    Sol 记(s_i)表示前(i)个数的前缀异或和,我们每次相当于要找一个(j)满足(0 < j < i)且((s_i \oplus s_j) + s_j)最大 然后下面…

    Java 2023年5月30日
    072
  • Java8日期常用方法

    java;gutter:true; import junit.framework.TestCase;</p> <p>import java.time.*; …

    Java 2023年5月29日
    059
  • 【设计模式】Java设计模式-外观模式

    Java设计模式 – 外观模式 😄 不断学习才是王道🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆原创作品,更多关注我CSDN: 一个有梦有戏的人…

    Java 2023年6月16日
    091
  • Dokcer运行Nacos容器自动退出问题

    Dokcer运行Nacos容器自动退出问题 参考博文 学生党,租的云服务器,2核2G。使用Docker运行Nacos容器的时候发现总是自动退出。Nacos日志里面没有明显的报错信息…

    Java 2023年6月8日
    071
  • MySQL十一:索引基本原理

    转载~ 在上一篇《索引基础知识回顾》中提到索引按照存储结构划分有B-Tree索引、Hash索引、B+Tree索引类型,接下来就学习一下这几种索引结构以及在实际存储引擎中的使用情况 …

    Java 2023年6月8日
    083
  • Day7-笔记(OOP、封装、继承、多态、static、instanceof、abstract)

    面向对象编程—OOP 面向对象编程(objcet-oriented programming)oop 面向对象编程的本质就是:以类的方式组织代码,以对象的组织封装数据。 …

    Java 2023年6月6日
    066
  • Java UUID的底层原理

    UUID的几个核心特定: 全局时空唯一性固定长度128比特,也就是16字节(1 byte = 8 bit)分配速率极高,单机每秒可以生成超过1000万个UUID(实际上更高) UU…

    Java 2023年5月29日
    076
  • 掌握这些招数,你也能写出HR眼中的高分简历

    一、简历的定义 简历就是将自身的经历、工作成绩、个人能力、性格等信息简要地列举出来。根据使用简历的目的不同,可以将简历分为展示型简历和求职型简历。此处跟大家分享的是求职简历。 二、…

    Java 2023年6月7日
    074
  • java宝典笔记(一)

    第四章java 基础知识 4.1 基本概念 一、java 优点 1.面向对象(封装、继承、多态) 2.可移植性。平台无关,一次编译,到处运行。Windows ,Linux ,mac…

    Java 2023年6月7日
    069
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球