文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在Java中使用二维数组

2023-06-15 00:28

关注

本篇文章为大家展示了如何在Java中使用二维数组,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

常用的java框架有哪些

1.SpringMVC,Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架。2.Shiro,Apache Shiro是Java的一个安全框架。3.Mybatis,MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。4.Dubbo,Dubbo是一个分布式服务框架。5.Maven,Maven是个项目管理和构建自动化工具。6.RabbitMQ,RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。7.Ehcache,EhCache 是一个纯Java的进程内缓存框架。

一、二维数组

进入正题之前.首先为了便于大家理解,我画了一个图:
xx枪战游戏中, 我是一个刚刚注册账号的小白,系统送了我两把枪,此时,我的武器库只有这么一层(可以理解为一位数组,枪就是对应的数组中对应的元素)

如何在Java中使用二维数组

经过艰苦卓绝的战斗,终于有了一笔钱,现在我打算配置好的游戏装备,我现在有了一个枪柜,它可以存放三层的枪械,每一层都可以放多把武器(这个就是二维数组,有多层,每层都是一个一维数组)

如何在Java中使用二维数组

随着游戏时长和我的高超技术,获取游戏装备的效率越来越高了,一个枪柜已经存不下了,于是,我就有了多个枪柜(这个就是多维数组,单个维度存放的就是单个的二维数组,单个二维数组中有多个一维数组~):


如何在Java中使用二维数组

上图从一维数组到多维数组的演变~是不是很形象,哈哈~

二维数组的定义

如何在Java中使用二维数组

二、二维数组的声明与初始化

2.1 声明

语法格式

//推荐元素的数据类型[][] 二维数组的名称;//不推荐元素的数据类型  二维数组名[][];//不推荐元素的数据类型[]  二数组名

照例,我把一些不推荐但是不会造成编译异常的写法放上,因为有的面试题会遇到,有印象就好

2.2 初始化

2.2.1 静态初始化
//1.先声明,再静态初始化元素的数据类型[][] 二维数组名;二维数组名 = new 元素的数据类型[][]{{元素1,元素2,元素3 。。。}, {第二行的值列表},...{第n行的值列表}};//2.声明并同时静态初始化元素的数据类型[][] 二维数组名 = new 元素的数据类型[][]{{元素1,元素2,元素3 。。。}, {第二行的值列表},...{第n行的值列表}};//3.声明并同时静态初始化的简化写法元素的数据类型[][] 二维数组的名称 = {{元素1,元素2,元素3 。。。}, {第二行的值列表},...{第n行的值列表}};//声明二维数组int[][] arr;//静态初始化arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}};//arr = new int[3][3]{{1,2,3},{4,5,6},{7,8,9}};//错误,静态初始化,右边new 数据类型[]中不能指定长度//声明并同时初始化int[][] arr = new int

示例代码1:

public class Array2Demo1 {public static void main(String[] args) {//定义数组int[][] arr = {{1,2,3},{4,5},{6}};System.out.println(arr);System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);System.out.println(arr[0][0]); //1System.out.println(arr[1][0]); //4System.out.println(arr[2][0]); //6System.out.println(arr[0][1]); //2System.out.println(arr[1][1]); //5//越界System.out.println(arr[2][1]); //错误}}

示例代码2:

public class TwoArryTest {    public static void main(String[] args) {        // 静态初始化        // 定义一个二维数组MM资源库        String[][] girls = new String[][]{ {"北方小姐姐","南方小姐姐","台湾小姐姐"},{"东京小姐姐","北海道小姐姐"},{"俄罗斯小姐姐","纽约小姐姐","乌克兰小姐姐"} };                 // 获取第一个数组中的北方小姐姐        System.out.println(girls[0][0]);        // 获取第一个数组中的南方小姐姐        System.out.println(girls[0][1]);        // 获取第二个数组中的东京小姐姐        System.out.println(girls[1][0]);        // 获取第三个组中的乌克兰小姐姐        System.out.println(girls[2][2]);    }}
2.2.2 动态初始化

动态初始化创建可以不用声明里面一维数组的长度,因此,它每个一维数组长度可以不一样,so,就有了下面两种初始化方式:

程序员指定数组的长度,后期再赋值(系统会先给定元素默认初始值)

规则二维表:每一行的列数是相同的

格式

//(1)确定行数和列数元素的数据类型[][] 二维数组名 = new 元素的数据类型[m][n];m:表示这个二维数组有多少个一维数组。或者说一共二维表有几行n:表示每一个一维数组的元素有多少个。或者说每一行共有一个单元格 //此时创建完数组,行数、列数确定,而且元素也都有默认值//(2)再为元素赋新值二维数组名[行下标][列下标] = 值;

示例代码:

public static void main(String[] args) {    //定义一个二维数组    int[][] arr = new int[3][2];        //定义了一个二维数组arr    //这个二维数组有3个一维数组的元素    //每一个一维数组有2个元素    //输出二维数组名称    System.out.println(arr); //地址值[[I@175078b        //输出二维数组的第一个元素一维数组的名称    System.out.println(arr[0]); //地址值[I@42552c    System.out.println(arr[1]); //地址值[I@e5bbd6    System.out.println(arr[2]); //地址值[I@8ee016        //输出二维数组的元素    System.out.println(arr[0][0]); //0    System.out.println(arr[0][1]); //0}

动态初始化二(不规则二维表)

不规则二维表:每一行的列数可能不一样 

格式

//(1)先确定总行数元素的数据类型[][] 二维数组名 = new 元素的数据类型[总行数][];//此时只是确定了总行数,每一行里面现在是null//(2)再确定每一行的列数,创建每一行的一维数组二维数组名[行下标] = new 元素的数据类型[该行的总列数];//此时已经new完的行的元素就有默认值了,没有new的行还是null//(3)再为元素赋值二维数组名[行下标][列下标] = 值;

不规则二维表,声明后,初始话内部一维数组时不能简写

// 不规则二维表// 定义二维数组int[][] arr = new int[3][]; // 3行,未知的列 // 初始化二维数组内的元素值arr[0] = new int[]{1}; // 此处不能简写为 arr[0] = {1}arr[1] = new int[]{2,3};arr[2] = new int[]{4,5,6,7};

示例代码1:

public class TwoArryTest {    public static void main(String[] args) {        //定义数组        int[][] arr = new int[3][];        System.out.println(arr);//[[I@175078b        System.out.println(arr[1][0]);//NullPointerException        System.out.println(arr[0]); //null        System.out.println(arr[1]); //null        System.out.println(arr[2]); //null        //动态的为每一个一维数组分配空间        arr[0] = new int[2];        arr[1] = new int[3];        arr[2] = new int[1];        System.out.println(arr[0]); //[I@42552c        System.out.println(arr[1]); //[I@e5bbd6        System.out.println(arr[2]); //[I@8ee016        System.out.println(arr[0][0]); //0        System.out.println(arr[0][1]); //0        //ArrayIndexOutOfBoundsException        //System.out.println(arr[0][2]); //错误        arr[1][0] = 100;        arr[1][2] = 200;    }}

示例代码2:

public class TwoArryTest {    public static void main(String[] args) {         // 动态初始化                String[][] Guns = new String[3][];         // 将两把狙击枪放入第一层狙击枪的枪柜中        String[] GunMagazine = {"AWM","Bird sniper"};         // 后来,我又买了三把步枪,也需要存放到枪柜里        String[] rifle = {"AK47","M4A1 QBZ95"};         // 装备很齐全了,下面,我还需要一些配件,辅助我取得游戏胜利        String[] auxiliaryWeapon = {"(手枪)pistol","(手雷)antitank grenade", "(烟雾弹)smoke bomb"};    }}

注意事项:如果是静态初始化,右边new 数据类型[][]中不能写数字,因为行数和列数,由{}的元素个数决定

三、二维数组的遍历

for(int i=0; i<二维数组名.length; i++){    for(int j=0; j<二维数组名[i].length; j++){        System.out.print(二维数组名[i][j]);    }    System.out.println();}

四、二维数组的内存图分析

二维数组再内存图中的流程,如下图:

如何在Java中使用二维数组

流程步骤:

首先创建main方法,这个main方法会存在栈内存中,(这个内存中的栈,堆前面有提到过,忘了没关系,我下一章还会再分享一下)

静态初始化创建二维数组arr, 于是在栈内存中,创建一个 int[][] arr= 

在栈内存创建二维数组int[][]时,里面的值会在堆内存开辟一个空间,左边的是二维数组,因为存储了三个一维数组,因此,它有三个元素,右边分别开辟三个一维数组的内存空间

每个内存空间都有一个地址,二维数组中存储的是一维数组的地址,而栈内存int[][]arr = 存储的是二维数组的内存地址

所以,第一个打印arr的二维数组是Java源码转换后的内存地址,第二个是二维数组中第一个一维数组的内存地址

第三个打印是二维数组中第一个一维数组中的第一个元素

五、数组操作的常见异常

数组越界异常

示例代码:

public static void main(String[] args) {   int[] arr = {1,2,3};   System.out.println(arr[3]);}

越界异常图

如何在Java中使用二维数组

异常原因

创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运行后,将会抛出 ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码

数组空指针异常

示例代码:

 public static void main(String[] args) {        //定义数组        int[][] arr = new int[3][];              System.out.println(arr[0][0]);//NullPointerException   }

空指针异常图

如何在Java中使用二维数组如何在Java中使用二维数组

异常原因

异常原因:因为此时数组的每一行还未分配具体存储元素的空间,此时arr[0]是null,此时访问arr[0][0]会抛出NullPointerException 空指针异常。

上述内容就是如何在Java中使用二维数组,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯