当前位置: 首页 > news >正文

Java:二维数组

目录

1. 二维数组的基础格式

1.1 二维数组变量的创建 —— 3种形式

1.2 二维数组的初始化

\1 动态初始化

\2 静态初始化

2. 二维数组的大小 和 内存分配

3. 二维数组的不规则初始化

4. 遍历二维数组

4.1 for循环

​编辑

4.2 for-each循环

5. 二维数组 与 方法

5.1 二维数组的数据类型

5.2 二维数组作为方法参数

5.3 二维数组作为返回值

6. 二维数组转字符串deepToString


1. 二维数组的基础格式

1.1 二维数组变量的创建 —— 3种形式

创建格式:

  1. 数据类型[ ][ ]  数组名;        //是最常用和推荐的写法
  2. 数据类型[ ]  数组名[ ];        //不推荐
  3. 数据类型  数组名[ ][ ];        //类似C语言的写法

例如:(后面才讲解创建对象和初始化,所以目前都用空引用null来给数组赋值。)

  1. int[ ][ ] arr1 = null;
  2. int[ ] arr2[ ] = null;
  3. int arr3[ ][ ] = null;

int[][] arrint[] arr[]int arr[][]这三种声明方式实际上都是等价的,它们都表示一个二维整数数组。

1.2 二维数组的初始化

\1 动态初始化

基础格式:

类型[ ][ ]  数组名 = new 类型[k1][k2];        //系统会用默认值给所有元素赋值

(其实动态初始化还包括不规则初始化,这个留到后面讲解)

例如:

int[][] arr = new int[3][4];              //创建了3X4的整型二维数组


注意:等号左边的两个方括号不能写数字。


\2 静态初始化

1.完全形式:

类型[ ][ ]  数组名 = new 类型[ ][ ] = { {第1行},{第2行},…,{第n行} };

2.省略形式:

类型[ ][ ]  数组名 = { {第1行},{第2行},…,{第n行} };

例如:

int[][] arr1 = new int[][]{{1, 2 },{4, 5, 6,3},{7, 8, 9}};int[][] arr2 = {{1, 2 },{4, 5, 6,3},{7, 8, 9}};

【注意事项】

  • 在静态初始化时,必须要有双重大括号{},否则会报错。【C语言是可以单重大括号的】

其他注意事项和一维数组类似,详细可看《Java:数组的定义和使用(万字解析)》

2. 二维数组的大小 和 内存分配

现在我们有一个3X4的整型数组,我们用.length的方式能否拿到该二维数组的长度:

​public static void main(String[] args) {int[][] arr = new int[3][4];System.out.println("长度为:"+ arr.length);}

输出:

打印结果是3。为什么arr的长度是3,而不是12 ?

要回答这个问题我们就需要弄清楚Java中二维数组的内存分配。

二维数组的内存分配:

  • 在Java中,二维数组实际上是一个数组的数组
  • 二维数组的内存是部分连续的,分为外层数组和内层数组。
  • 内存数组变量之间是连续的外层数组连续),内存数组之间是不连续的

以刚刚的3X4的整型数组为例:

外层数组是arr,内层数组和内层数组变量是:arr[0]、arr[1]、arr[2]。

arr[0]、arr[1]、arr[2]是arr的3个元素,它们是连续的,所以arr.length等于3。

每个内层数组内部是连续的:例如arr[0],从arr[0][0]到arr[0][3]都是连续的。

但每个内层数组之间是不连续的

C语言中的二维数组是完全连续,所以可依靠列数来反推行数(可以省略行);而Java中的二维数组更像是C语言中数组指针数组,即数组中的每个元素都是一个数组指针

3. 二维数组的不规则初始化

数组指针数组中,每个数组指针的大小是不固定的;所以类似的,Java中的二维数组不能省略行,但是列可以省。(数组指针所指向的数组大小可以不知道)

不规则初始化:

类型[ ][ ]  数组名 = new 类型[k][ ];

注意:

  • 不规则初始化只能省略列不能省略行
  • 不规则初始化也是一种动态初始化,但是这样只为外层数组创建了对象,而内层数组还没创建对象(目前内层数组变量的值是null

以不规则初始化创建二维数组的格式: (大小是k1 X k2)

类型[ ][ ]  数组名 = new 类型[k1][ ];

for(int i = 0; i < 数组名.length; i++){

       数组名[i] = new 类型[k2];

}

例如:创建整型二维数组,大小是3X4

int[][] arr = new int[3][];
for(int i = 0; i < arr.length; i++){arr[i] = new int[4];
}

4. 遍历二维数组

二维数组的遍历也有for循环和for-each循环

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

以该数组arr为例:

4.1 for循环

先取外层数组的长度(行数),再取内层数组的长度(列数)

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

4.2 for-each循环

行数变量x1的类型是一维数组类型列数变量x2的类型是元素类型

for(int[] x1: arr){for(int x2: x1){System.out.print(x2+" ");}System.out.println();
}

5. 二维数组 与 方法

5.1 二维数组的数据类型

数组的数据类型是“ 元素类型[ ][ ] ”。

例如:int[][] arr = new int[3][3];

该数组arr的数据类型是int[ ][ ]。不是int[3][3],不是int[3][ ],也不是int[3]。

【如果在C语言中,该数组arr的数据类型是int[3][3]

5.2 二维数组作为方法参数

你可以将一个二维数组作为参数传递给方法。例如:

 public static void printArray(int[][] array) {for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[i].length; j++) {System.out.print(array[i][j] + " ");}System.out.println();}}

二维数组传递的也是地址。

Java中的二维数组形参是一个“真二维数组”。而C语言中的二维数组形参的本质是指针,而且是行指针(不是二级指针,也不是数组指针)。

5.3 二维数组作为返回值

你也可以从方法中返回一个二维数组。例如:

public static int[][] createArray(int rows, int cols) {int[][] array = new int[rows][cols];int value = 1;for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {array[i][j] = value++;}}return array;}

6. 二维数组转字符串deepToString

我们看一下,用toString方法能不能把二维数组打印出来:

public static void main(String[] args) {int[][] arr = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};System.out.println(arr.toString());System.out.println(Arrays.toString(arr));}

输出:

可以发现,无论是arr.toString还是Arrays.toString(arr),toString方法不能把二维数组转为字符串那应该怎么办呢?


Arrays工具类提供了方法deepToString,它可以让我们深层次地把二维数组转成字符串。

注意:数组自身只有toString方法,没有deepToString方法

例如:

    public static void main(String[] args) {int[][] arr = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};System.out.println(Arrays.deepToString(arr));}

输出;


本期分享完毕,感谢大家的支持Thanks♪(・ω・)ノ

相关文章:

Java:二维数组

目录 1. 二维数组的基础格式 1.1 二维数组变量的创建 —— 3种形式 1.2 二维数组的初始化 \1 动态初始化 \2 静态初始化 2. 二维数组的大小 和 内存分配 3. 二维数组的不规则初始化 4. 遍历二维数组 4.1 for循环 ​编辑 4.2 for-each循环 5. 二维数组 与 方法 5.1…...

Android 天气APP(三十七)新版AS编译、更新镜像源、仓库源、修复部分BUG

上一篇&#xff1a;Android 天气APP&#xff08;三十六&#xff09;运行到本地AS、更新项目版本依赖、去掉ButterKnife 新版AS编译、更新镜像源、仓库源、修复部分BUG 前言正文一、更新镜像源① 腾讯源③ 阿里源 二、更新仓库源三、修复城市重名BUG四、地图加载问题五、源码 前…...

Xilinx IP核(3)XADC IP核

文章目录 1. XADC介绍2.输入要求3.输出4.XADC IP核使用5.传送门 1. XADC介绍 xadc在 所有的7系列器件上都有支持&#xff0c;通过将高质量模拟模块与可编程逻辑的灵活性相结合&#xff0c;可以为各种应用打造定制的模拟接口&#xff0c;XADC 包括双 12 位、每秒 1 兆样本 (MSP…...

计算机网络socket编程(2)_UDP网络编程实现网络字典

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络socket编程(2)_UDP网络编程实现网络字典 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交流讨…...

c#窗体列表框(combobox)应用——省市区列表选择实例

效果如下&#xff1a; designer.cs代码如下&#xff1a; using System.Collections.Generic;namespace 删除 {public partial class 省市区选择{private Dictionary<string, List<string>> provinceCityDictionary;private Dictionary<string,List<string&…...

Nginx 架构与设计

Nginx 是一个高性能的 HTTP 和反向代理服务器&#xff0c;同时也可以用作邮件代理和通用的 TCP/UDP 负载均衡器。它的架构设计以高并发、高可扩展性和高性能为目标&#xff0c;充分利用操作系统提供的多路复用机制和事件驱动模型。以下是 Nginx 的架构和设计特点&#xff1a; 1…...

python Flask指定IP和端口

from flask import Flask, request import uuidimport json import osapp Flask(__name__)app.route(/) def hello_world():return Hello, World!if __name__ __main__:app.run(host0.0.0.0, port5000)...

多线程 相关面试集锦

什么是线程&#xff1f; 1、线程是操作系统能够进⾏运算调度的最⼩单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位&#xff0c;可以使⽤多线程对 进⾏运算提速。 ⽐如&#xff0c;如果⼀个线程完成⼀个任务要100毫秒&#xff0c;那么⽤⼗个线程完成改…...

【数据结构】—— 线索二叉树

引入 我们现在提倡节约型杜会&#xff0c; 一切都应该节约为本。对待我们的程序当然也不例外&#xff0c;能不浪费的时间或空间&#xff0c;都应该考虑节省。我们再观察团下图的二叉树&#xff08;链式存储结构)&#xff0c;会发现指针域并不是都充分的利用了&#xff0c;有许…...

uni-app 发布媒介功能(自由选择媒介类型的内容) 设计

1.首先明确需求 我想做一个可以选择媒介的内容&#xff0c;来进行发布媒介的功能 &#xff08;媒介包含&#xff1a;图片、文本、视频&#xff09; 2.原型设计 发布-编辑界面 通过点击下方的加号&#xff0c;可以自由选择添加的媒介类型 但是因为预览中无法看到视频的效果&…...

How to update the content of one column in Mysql

How to update the content of one column in Mysql by another column name? UPDATE egg.eggs_record SET sold 2024-11-21 WHERE id 3 OR id 4;UPDATE egg.eggs_record SET egg_name duck egg WHERE id 2;...

URL在线编码解码- 加菲工具

URL在线编码解码 打开网站 加菲工具 选择“URL编码解码” 输入需要编码/解码的内容&#xff0c;点击“编码”/“解码”按钮 编码&#xff1a; 解码&#xff1a; 复制已经编码/解码后的内容。...

Python3 爬虫 Scrapy的安装

Scrapy是基于Python的分布式爬虫框架。使用它可以非常方便地实现分布式爬虫。Scrapy高度灵活&#xff0c;能够实现功能的自由拓展&#xff0c;让爬虫可以应对各种网站情况。同时&#xff0c;Scrapy封装了爬虫的很多实现细节&#xff0c;所以可以让开发者把更多的精力放在数据的…...

QT中QString类的各种使用

大部分的QString使用可以参考:QT中QString 类的使用--获取指定字符位置、截取子字符串等_qstring 取子串-CSDN博客 补充一种QString类的分离:Qt QString切割(Split()与Mid()函数详解)_qstring split-CSDN博客 1. Trimmed和Simplified函数(去除空白) trimmed&#xff1a;去除了…...

linux 网络安全不完全笔记

一、安装Centos 二、Linux网络网络环境设置 a.配置linux与客户机相连通 b.配置linux上网 三、Yum详解 yum 的基本操作 a.使用 yum 安装新软件 yum install –y Software b.使用 yum 更新软件 yum update –y Software c.使用 yum 移除软件 yum remove –y Software d.使用 yum …...

uniapp将图片url转换成base64支持app和h5

uniapp将图片url转换成base64支持app和h5 imageToBase64支持app和h5, app内使用plus.io.resolveLocalFileSystemURL方法转换 h5内使用uni.request方法转换 // 图片转base64 export const imageToBase64 (path) > {// #ifdef APP-PLUSreturn new Promise((resolve, rejec…...

odoo17 档案管理之翻译2

翻译格式&#xff1a;#: model_terms:对象名称,arch_db:模块名.xml_id #. module: dms #: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban #: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban #: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_…...

风尚云网前端学习:制作一款简易的在线计算器

风尚云网前端学习&#xff1a;制作一款简易的在线计算器 简介 在前端开发的学习过程中&#xff0c;实现一个简单的在线计算器是一个常见的练习项目。它不仅能够帮助我们熟悉HTML、CSS和JavaScript的基本用法&#xff0c;还能够加深我们对事件处理和DOM操作的理解。今天&#…...

Android蓝牙架构,源文件目录/编译方式学习

Android 版本 发布时间 代号&#xff08;Codename&#xff09; Android 1.0 2008年9月23日 无 Android 1.1 2009年2月9日 Petit Four Android 1.5 2009年4月27日 Cupcake Android 1.6 2009年9月15日 Donut Android 2.0 2009年10月26日 Eclair Android 2.1 2…...

ubuntu中使用ffmpeg和nginx推流rtmp视频

最近在测试ffmpeg推流rtmp视频&#xff0c;单独安装ffmpeg是无法完成推流的&#xff0c;需要一个流媒体服务器&#xff0c;常用nginx&#xff0c;可以直接在ubuntu虚拟机里面测试一下。 测试过程不涉及编译ffmpeg和nginx&#xff0c;仅使用基本功能&#xff1a; 1 安装ffmpeg …...

医疗AI公平性评估:从数据复杂性到系统任意性的三支柱分析框架

1. 项目概述&#xff1a;当医疗AI遇上公平性拷问在医疗健康领域&#xff0c;机器学习模型正从实验室的“概念验证”阶段&#xff0c;大步迈向临床决策支持的“实战”前线。无论是预测糖尿病风险&#xff0c;还是辅助诊断心脏病&#xff0c;这些算法模型的核心承诺是&#xff1a…...

别再只跑模型了!用FAD、NDB、JSD给你的AI生成声音打个分(Python实战避坑)

用FAD、NDB、JSD给你的AI生成声音打个分&#xff08;Python实战避坑指南&#xff09;当你在深夜终于调试完最后一个神经网络层&#xff0c;按下生成按钮听到第一段AI合成的声音时&#xff0c;那种成就感无与伦比。但很快&#xff0c;一个更棘手的问题出现了&#xff1a;这段声音…...

为什么你的 Agent 总是“偷懒”?大模型惰性与激励提示词研究

为什么你的 Agent 总是“偷懒”?大模型惰性与激励提示词研究 各位知识工作者、AI 产品经理、大模型开发者、编程爱好者——如果你正在开发或使用基于大语言模型(LLMs)的智能体(Agent),或者只是在日常用 ChatGPT、Claude、文心一言这类工具时,肯定遇到过这类令人抓狂的场…...

效率直接起飞!2026年最值得信赖的专业AI论文软件

2026年AI论文写作工具已从“内容生成”升级为智能学术辅助系统&#xff0c;核心评价维度包括文献真实性、格式合规性、长文本逻辑、查重降重、AIGC合规与多语言支持。本次测评覆盖6款主流工具&#xff0c;测试场景涵盖中英文论文、全流程与专项功能、免费与付费版本&#xff0c…...

解决华硕灵耀X双屏Linux下扬声器不工作的问题

解决华硕灵耀X双屏Linux下扬声器不工作的问题系统信息解决方法0. 备份系统1. 修改内核启动参数&#xff0c;使用HDA驱动2. 测试修复方案3. 持久化修复方案系统信息 我的电脑是&#xff1a;华硕灵耀X双屏Pro UX5100HM 电脑声卡为&#xff1a;ALC294 操作系统为&#xff1a;Manj…...

微信抓包全链路实战:Proxifier+Fiddler+Burp协同排障指南

1. 为什么微信抓包成了“玄学”&#xff0c;而你总在重装系统&#xff1f; 微信抓包这件事&#xff0c;我干了七年&#xff0c;从2017年用Charles配iOS证书开始&#xff0c;到今天手头常备三套环境&#xff1a;Mac上跑Fiddler EverywhereProxifier组合应对企业微信定制版&…...

在Node.js后端服务中集成Taotoken,实现稳定可靠的大模型功能调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Node.js后端服务中集成Taotoken&#xff0c;实现稳定可靠的大模型功能调用 将大模型能力集成到后端服务是现代应用开发的常见需求…...

Qt 5.9.1 MinGW 32位下,手把手搞定周立功CAN二次开发库的加载与配置

Qt 5.9.1 MinGW 32位环境下周立功CAN二次开发库的实战配置指南 在嵌入式开发领域&#xff0c;CAN总线通信一直是工业控制和汽车电子系统中的核心技术。对于使用Qt框架进行CAN通信开发的工程师来说&#xff0c;如何正确配置硬件厂商提供的二次开发库往往是项目起步阶段的第一道门…...

taotoken的按token计费模式如何帮助个人开发者控制实验成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken的按Token计费模式如何帮助个人开发者控制实验成本 对于个人开发者、学生或独立研究者而言&#xff0c;在探索AI应用或进行…...

终极指南:BetterNCM插件管理器一键安装,让网易云音乐焕然新生

终极指南&#xff1a;BetterNCM插件管理器一键安装&#xff0c;让网易云音乐焕然新生 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐功能单一而烦恼&#xff1f;Bett…...