课时27:二维数组

简介: 本次分享的主题是二维数组。主要分为两个部分:1.传统的数组2.二维数组在程序中的定义语法

课时27:二维数组


摘要:本次分享的主题是二维数组。主要分为两个部分:

1.传统的数组

2.二维数组在程序中的定义语法

 

接下来看一下二维数组的概念。什么叫做二维数组?在之前所定义的数组中,大家会发现只有一个中括号所以那个时候的数组就好像是一行数据一样。那么可以利用所谓的索引,也就是下标来访问这行数据。

 

01.传统的数组

 

那么现在来观察什么?首先来看传统的数组,它就像是一行数据。在这里简单地做一个下标操作的控制示例。比如在这里写上 82 ,然后在其后放一个数字 2 作为示例。第一个数字表示下标,下标实际上就是用来访问数组的索引。第二个数字则是实际存储的数据,整个过程中下标的划分是从 0 开始的,依次是 0  1  23  4  5  6数据就随便写几个作为示例。并且代码已经写完了。


如果现在把数据放在这里,就会有一个最直接的问题。首先在操作过程中下标是由系统来维护的,所以不需要去改动它,而数据则是由自己设置的,那么如果现在想找到 789 这个数据,那么只需要知道找到一个数据只需要确定一个下标即可,之前所理解的可以称之为一维数组。


那么什么是二维数组?如果你现在需要一个多行多列的结构会想到什么?一定是表的结构。在这种情况下就需要通过两个坐标,也就是两个下标才能描述出一个具体的数据位置。

image.png

以这个程序为例来说明。比如现在稍微增加一些内容,先在这写上0 。接着在这个位置写上 2 。我们仍然会在这部分设置一些具体的数据,随便写一些作为示例,仅供演示之用。


假设现在在这段代码中想要确定 756 这个数据,如果想要确定这个数据,在整个代码中需要知道它是在哪一行、哪一列。并且需要行下标与列下标共同来确定一个数据的位置。这样才能准确地找到它。

image.png

因此这种数组形式就被称为二维数组。如果一个数组后面有两个中括号,那么它就是二维数组。那么什么叫三维数组?想象一下脸是不是一个三维的物体?三维就是具有立体面的。同理三维数组就是在二维数组的基础上再增加一个维度,希望你们能理解这个含义。

 

02.二维数组在程序中的定义语法

 

首先来看第一点,即数组的动态初始化。接着再看数组的静态初始化。对于动态初始化代码可以这样写:首先指定数据类型,然后给出数组的名称,接着是两个中括号,之后使用 New 关键字加上数据类型,并指定行数和列数。而对于静态初始化则是直接指定数据类型和数组名称,并通过花括号内的一系列数据来初始化数组。


接下来将写出完整的语法,而不是简化语法。使用 New 关键字后跟上数据类型和中括号就可以进行数组的初始化。在这个位置还可以继续追加若干个数据元素。这个过程就构成了数组的静态初始化,如果单独来看的话就会有一个问题:这每一行是不是又可以看作是一个数组如果单独观察每一行其实就相当于一个数组元素。所以大家发现所谓的二维数组,其实就是对数组进行了嵌套


接下来在这个过程中定义二维数组,但这里不做重点讲解,因为二维数组不是本次课程的重点。代码可以这样写:首先声明一个Int 类型的二维数组变量 Date ,然后使用 New Int 来分配内存空间,并指定行数和列数。最后在代码中填充我们所需的操作数据。


image.png

public class ArrayDemo {
public static void main(String args[]){
int data[]
  }
}

首先在这段程序代码中可以这样写:先列出 12345 ,这是一个包含五个元素的序列,然后再列出 123  5678 那么你们注意到这些数据排列的规则了吗?其实它们并不规则,但现在并不考虑这一点,只是想给大家做一个正常的演示。


从这段数据中可以看出最多有五列数据,而行数则是三行。所以可以简单地把这个数据结构画下来:最多五列,这里是三行数据。那么根据这样的数据结构来说,这个地方需不需要添加索引?答案是需要的。那可以这样设定:六列对应三行数据。所以 4 号是 6  4 。那么第一个要描述的是整个过程中使用的索引。


索引实际上就是下标,这两个概念在大多数情况下是相通的通常不会强制区分索引和下标,大家习惯上认为它们是一个意思就可以了。

这是其中一组操作示例。在索引方面首先要注意的是为了后续内容的清晰展示会稍微改变一下底色,以便区分


现在来看索引:首先是 0  1  2  3  4 ,然后是 0  1 、2 。观察这个结构,第一个数组是 12345 ,它是不是全齐的? 12345 放在这里,第二个数组是 123 ,它位于前面,紧接着后面的是 5678到现在为止应该已经大致清楚了当前这个数组的形式。


首先这块区域是没有数据的,按照刚才所说的既然二维数组的每一行都可以看作是一个数组,那么在这种情况下就可以通过每一行的数组来求出该行的数组长度。所以现在可以这样来思考:之前一个中括号用一个 For 循环来遍历,那么现在有两个中括号就需要用两个 For 循环来遍历。

image.png

0x 现在小于之前的 Date.length x++ 。完成这一步后,在当前的代码中使用 For 循环的 Int y ,再跟上 Oy 并且 Oy 小于Date x那么它的文字对吗?X++之后,要求Y++,注意别写错了,这个经常会误写成X。之后先这样写一个输出语句,关于 X 需要写得稍微详细一点


在这个位置找到一个叫做 Y 的变量,那么 Y 应该等于什么?现在加上一个叫做 Date 的变量,后面跟上 Y 。然后在后面加一个换行符,叫做换行。


现在写完之后来看一下结果,编译并运行一下。大家看数据是不是已经出来了?所以说这就是一个二维数组,对二维数组的输出肯定需要进行两次循环过程。但是这种不规则的二维数组,一般不建议大家使用。如果现在要求使用For 循环来进行输出,该怎么办?那么会很复杂吗?


首先已经知道了二维数组的本质是数组中的数组,那这样写行不行?看这里 Int Temp 等于: Date 是什么意思?是想要获取第一行的数组元素,于是再跟上 For 循环,而 Int Num 用于遍历这些元素


在代码中可以这样写:使用 System.out.print ,在这个过程中遍历每一个 Num ,并在其后加上一个顿号,然后加上一个换行符。按照刚才所说的二维数组就是数组的数组。现在在代码中再次编译并执行。如果成功了那么你们也可以完成这个任务。所以通过 For-each 输出格式可以清楚地观察到二维数组其实就是数组的嵌套使用


随着开发技术的不断发展,当进行应用层的程序开发时,而这里的应用层程序开发指的是那些不需要过多涉及底层细节,只需按照既定流程编写代码的开发工作。在这样的场景下很少会用到二维数组,更不用说更高维度的数组,比如三维数组或多维数组


或许有同学会问如果真的遇到三维数组怎么办?那就需要三层循环来处理,这无疑会增加整个程序的复杂度。所以就目前的开发需求而言,二维数组的使用相对较少,不必将其视为重点学习内容。但是至少大家应该知道包含两个或两个以上中括号的数组都被称为多维数组。

相关文章
|
开发框架 移动开发 前端开发
分享166个ASP源码,总有一款适合您
分享166个ASP源码,总有一款适合您
951 0
|
Linux Docker 容器
centos 7.9 部署 harbor 镜像仓库实践
centos 7.9 部署 harbor 镜像仓库实践
centos 7.9 部署 harbor 镜像仓库实践
|
存储 移动开发 小程序
【uniapp小程序】上传图片
【uniapp小程序】上传图片
2245 0
【uniapp小程序】上传图片
|
10月前
|
Java
课时15:普通代码块
代码块是用“{}”定义的结构,分为普通代码块、构造块、静态块和同步代码块。普通代码块位于方法内,用于拆分结构、避免变量冲突。例如,在`if`语句中定义的变量仅在该块内有效,防止与外部同名变量冲突。同步代码块则主要用于多线程环境。通过合理使用代码块,可以使程序结构更清晰、逻辑更严谨。
105 1
|
6月前
|
安全 Unix Java
linux中kill -9和kill -15区别
在 Linux/Unix 系统中,`kill -9` 和 `kill -15` 是终止进程的常用命令,核心区别在于发送的信号类型不同,导致进程终止行为截然不同。`kill -15`(SIGTERM)允许进程进行清理操作后优雅退出,适用于正常关闭;而 `kill -9`(SIGKILL)则强制终止进程,不给予任何清理机会,仅在进程无响应时使用。本文从信号类型、行为、工作原理及使用建议等方面进行详细对比,帮助你更安全、有效地管理进程。
772 0
|
10月前
|
监控 机器人 数据挖掘
|
Linux
CentOS 7 上挂载硬盘到系统
在 CentOS 7 中挂载硬盘,步骤包括:1、查找未挂载磁盘;2、创建分区;3、格式化为 ext4;4创建挂载点;5、挂载硬盘;6、检查挂载状态;7、 编辑 `/etc/fstab` 以实现开机自动挂载。
1037 3
|
人工智能 搜索推荐 机器人
一款开源的宝藏聊天机器人Typebot
Typebot 是一个强大的开源聊天机器人框架,支持多种 AI 模型,包括 Claude 3.5 和 Dify.AI 助手,适用于客服、电商推荐等场景。它通过 Webhook 块实现与外部服务的交互,帮助开发者轻松创建和管理对话式 AI 应用。通过阿里云账号登录,即可快速创建和部署自己的聊天机器人。
|
机器学习/深度学习 人工智能 搜索推荐
深度学习在医疗影像诊断中的应用与前景####
本文深入探讨了深度学习技术在医疗影像诊断领域的应用现状、面临的挑战以及未来发展趋势。通过分析卷积神经网络(CNN)等深度学习模型在处理复杂医学图像时的优势,结合具体案例,如癌症早期检测、疾病分类及分割等方面取得的显著成果,展示了深度学习如何革新传统医疗影像分析方法。同时,文章也指出了数据隐私保护、模型解释性不足、临床集成难度大等问题,并展望了联邦学习、可解释AI、多模态融合等技术在解决这些问题上的潜力,为推动深度学习在医疗健康领域的更广泛应用提供了思路。 ####
773 0
|
存储 JavaScript 前端开发
Axure设计之日期时间范围选择器
在产品设计和原型制作中,日期时间范围选择器是常见需求。本文介绍如何使用Axure的动态面板、中继器、文本框、按钮及时间函数,快速制作一个功能完备的日期时间范围选择器。详细步骤包括创建基本框架、设置时间函数、载入时获取当前时间、添加时间选择功能、更新文本框值和验证格式化。通过这些步骤,你可以在Axure中轻松实现这一功能。
1487 0

热门文章

最新文章