Java重修第一天—学习数组
1. 认识数组
建议1.5倍速学习,并且关闭弹幕。
数组的定义:数组是一个容器,用来存储一批同种类型的数据。
下述图:是生成数字数组和字符串数组。

为什么有了变量还需要定义数组呢?为了解决在某些场景下,变量实现该功能困难的情况。
如下述需求,解决上课随机点名的需求。代码简单,逻辑清晰。

在处理同一批数据时候用数组和合适。
2. 数组的定义和访问
2.1 静态初始化数组
与其他类型语言做对比方便记忆。
public class Learn_01 {public static void main(String[] args) {//简化格式-数据类型[] 数组名 = {} ;int[] ages = {12,24,36};double[] scores = {89.3,99.5,59.2,88};}
}
2.2 计算机中数组的原理
当代码执行到 int [] ages 时,内存会开辟一个空间即ages, 同时将数据(12,24,36)存入另一个空间,这个空间的地址为i@4c87330,然后给数组进行标号,并且将地址i@4c87330存入ages中。
这个存储过程像不像cpp或者c语言中的指针呢?其本质是一个道理的。因此数组可以被称为引用数据类型。

代码验证
//简化格式-数据类型[] 数组名 = {} ;
int[] ages = {12,24,36};
double[] scores = {89.3,99.5,59.2,88};
// 输出的是数据的地址
System.out.println(ages);
// 采用这个方法输出的是数据本身
System.out.println(Arrays.toString(ages));
可以看到ages中存入的是数据的地址。

2.3 数组的访问
数组名[索引]
int[] ages = {12,24,36};
System.out.println(ages[0]); // 12
System.out.println(ages[1]); // 24
System.out.println(ages[2]); // 36
// 数组访问不能超过数组的长度,否则会报错:.ArrayIndexOutOfBoundsException
// System.out.println(ages[3]);
数组的遍历
可以通过for循环或者for-each 等遍历数组
可以用于求和、元素搜索和获取最大最小值功能实现等。
//简化格式-数据类型[] 数组名 = {} ;
int[] ages = {12,24,36};
// 在遍历的时候需要知道数组的长度(ages.length),否则就会报上述错误。
for (int i = 0; i < ages.length; i++) {System.out.println(ages[i]);
}
// for-each 的遍历方式并不需要知道长度,每个age本身就是ages中的数据,因此直接输出
for (int age : ages) {System.out.println(age);
}
以下讲解求和例子,最大最小值的例子可以试着自己实现。
求和
// 方式1:数组求和
int sum = 0; // 定义变量用于记录求和。
for (int i = 0; i < ages.length; i++) {sum += ages[i];
}
System.out.println(sum);
// 方式2:数组求和
sum = 0;
for (int age : ages) {sum += age;
}
System.out.println(sum);
总结:
1、数组是引用数据类型。
2、数据的下标默认从零开始。
2.4 动态初始化数组
定义数组时先不存入具体的元素值,只确定数组存储的数据类型和数组长度。
动态初始化格式
int[] arr = new int[3]
与默认初始化不同的是,在动态初始化阶段,数据的值都存入默认值0。这里int类型数组的默认值为0.

代码验证
public class Learn_01 {public static void main(String[] args) {int[] ages = new int[3];System.out.println(ages[0]); // 结果为0System.out.println(ages[1]); // 结果为0System.out.println(ages[2]); // 结果为0}
}
给数组赋值,可以通过for循环的方式,也可以通过逐个赋值的方式。
// 这里采用的是逐个赋值的方式。
int[] ages = new int[3];
ages[0] = 12;
ages[1] = 24;
ages[2] = 36;
System.out.println(Arrays.toString(ages));
int类型数组的默认动态初始化数据为0,那么其他数据类型的初始化数据值为什么?

总结:
1、动态初始化:适合开始不确定具体元素值,只知道元素长度的场景。
2、静态初始化:适合一开始就知道要存入哪里值的场景。
2.5 案例
莫歌唱比赛,需要开发一个系统:可以录入六个评委的打分,录入完毕后立即输入平均分作为选手得分。
分析:
1、评委的分数是后期录入的,一开始不知道具体分数,因此需要定义一个动态数组。
2、由于分数是手动录入的,因此需要使用Scanner读取评分。
代码如下:
public class Learn_01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);double[] scores = new double[6];for (int i = 0; i < scores.length; i++) {System.out.println("请输入第" + (i+1) + "个评委的评分:");scores[i] = sc.nextDouble();}System.out.print("选手的得分为:");// 保留两位小数,可以使用string方式DecimalFormat df = new DecimalFormat("#.00");System.out.println(df.format(Arrays.stream(scores).sum()/scores.length));}
}
一般情况下,需要去除最大值和最小值,然后再去平均值,这个可以作为进阶方案,你可以自己实现一下,发到评论区中。
如何保留两位小数可以参考这篇文章
Java中double保留两位小数的各种方法
2.6 常见问题
1、程序是如何执行呢?
首先字节码文件要加载到方法区中。
其次方法运行时所进入的内存变量在栈内存中。
最后采用new命令产生的东西会开辟空间放入堆内存中。
那么如下命令时怎么执行呢?

第一步将AppayDemo.class文件存入到方法区中。

第二步将main方法加入到栈中,然后执行main方法中的代码。

第三步,执行 int a = 10; 这一个命令因此会在栈中开辟一个空间生成a这个变量

第四步,打印变量a

第五步:创建arr变量,注意arr和数据存放的位置是不同的。

其他的依此就可以理解了....主要通过arr和索引找到数据值。
2、多个变量指向同一个数据
有了第一个问题的基础,那么第二个问题就很好理解了。可以通过操作arr1和arr2然后改变数据中的值。

知乎账号: 兜兜转转 - 知乎 (zhihu.com)
擅长领域:IRS通信仿真、Java和算法等,欢迎在评论区留言
助力每一个梦想:

相关文章:
Java重修第一天—学习数组
1. 认识数组 建议1.5倍速学习,并且关闭弹幕。 数组的定义:数组是一个容器,用来存储一批同种类型的数据。 下述图:是生成数字数组和字符串数组。 为什么有了变量还需要定义数组呢?为了解决在某些场景下,变…...
【C#】知识点实践序列之Lock的锁定代码块
大家好,我是全栈小5,欢迎来到《小5讲堂之知识点实践序列》文章。 2024年第1篇文章,此篇文章是C#知识点实践序列之Lock知识点,博主能力有限,理解水平有限,若有不对之处望指正! 本篇验证Lock锁定代…...
StringBad ditto (motto)
第12章 类和动态内存分配 StringBad ditto (motto): // calls StringBad (comst StringBad &) StringBad metoo - motto: // calls StringBad (const StringBad &) StringBad also StringBad (motto): // calls StringBad (const StringBad &) StringBad * pStri…...
Redis缓存击穿、缓存雪崩、缓存穿透
缓存击穿(某个热点key缓存失效) 概念 缓存中没有但数据库中有的数据,假如是热点数据,那key在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力增大和缓存雪崩的…...
【PCB专题】Allegro封装更新焊盘
在PCB封装的绘制中,有时会出现需要更新焊盘的情况。比如在制作封装的过程中发现焊盘做的不对而使用PAD_Designer重新更新了焊盘。 那在PCB中如何更新已经修改过的焊盘呢? 打开封装,选择Tools->Padstack->Refresh... 选择Refresh all …...
ES6之Reflect详解
✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…...
文件监控-IT安全管理软件
文件监控和IT安全管理软件是用于保护企业数据和网络安全的工具。这些工具可以帮助企业监控文件的变化,防止未经授权的访问和修改,并确保数据的安全性和完整性。 一、具有哪些功能 文件监控软件可以实时监控文件系统的活动,包括文件的创建、修…...
达梦数据库安装超详细教程(小白篇)
文章目录 达梦数据库一、达梦数据库简介二、达梦数据库下载三、达梦数据库安装1. 解压2. 安装 四、初始化数据库五、DM管理工具 达梦数据库 一、达梦数据库简介 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。 达梦数…...
复试 || 就业day09(2024.01.04)算法篇
文章目录 前言验证外星语词典在长度 2N 的数组中找出重复 N 次的元素找到小镇的法官查找共用字符数组的相对排序分发饼干分发糖果区间选点(AcWing)最大不相交区间数量(AcWing)无重叠区间关于重写小于号 前言 💫你好,我是辰chen,本文旨在准备考…...
Win10电脑关闭OneDrive自动同步的方法
在Win10电脑操作过程中,用户想要关闭OneDrive的自动同步功能,但不知道具体要怎么操作?首先用户需要打开OneDrive,然后点击关闭默认情况下将文档保存到OneDrive选项保存,最后关闭在这台电脑上同步设置保存就好了。接下来…...
linux(centos)相关
文件架构: bin--binary--二进制命令,可直接执行 sbin systembin系统二进制命令,超级管理员 lib 库目录 类似dll文件 lib64 64位系统相关的库文件 usr 用户文件 boot 引导分区的文件,链接,系统启动等 dev device设备目录…...
外贸网站显示不安全警告怎么办?消除网站不安全警告超全指南
外贸网站显示不安全警告怎么办?当用户访问你的网站,而您的网站没有部署SSL证书实现HTTPS加密时,网站就会显示不安全警告,这种警告,不仅有可能阻止用户继续浏览网站,影响网站声誉,还有可能影响网…...
Java:HeapMemory和DirectMemory配置与使用介绍
目录 一、Heap内存 1、查看Heap内存配置的最大值 2、配置Heap内存最大值的方式 3、配置Heap内存最小值的方式 4、查看已使用Heap内存的方式 5、查看未使用Heap内存的方式 二、Direct内存 1、查看Direct内存配置的最大值 2、配置Direct内存最大值的方式 3、获取Direct…...
记 -bash: docker-compose: command not found 的问题解决
docker-compose: command not found 错误表明系统无法找到 docker-compose 命令。这可能是因为 docker-compose 并未正确安装,或者其可执行文件的路径未包含在系统的 PATH 变量中。 以下是我遇到时解决方法: 确保 Docker 和 Docker Compose 已安装&…...
分享10篇优秀论文,涉及图神经网络、大模型优化、表格分析
引言 第38届AAAI人工智能年度会议将于2024年2月在加拿大温哥华举行。今天给大家分享十篇AAAI2024论文,主要涉及图神经网络,大模型幻觉、中文书法文字生成、表格数据分析、KGs错误检测、多模态Prompt、思维图生成等。 论文获取方式,回复&am…...
Ubuntu 24.04 Preview 版安装 libtinfo5
Ubuntu 24.04 Preview 版安装 libtinfo5 0. 背景1. 安装 libtinfo52. 安装 cuda 0. 背景 Ubuntu 24.04 Preview 版安装 Cuda 时报确实 libtinfo5 的错误。 1. 安装 libtinfo5 wget http://archive.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.4-2_amd64.deb dpk…...
Spring AOP<一>简介与基础使用
spring AOP 基础定义 含义使用切面组织多个Advice,Advice放在切面中定义。也就是说是定义通知的自定义类。自定义的AOP类Aspect连接点方法调用,异常抛出可以增强的点JoinPoint :也就是**被增强的方法的总称,可以获取具体方法的信息ÿ…...
react ant tree节点没有children也会显示展开框 节点有children却不显示展开框
1.背景 最近处理树状结构时遇到了一个诡异问题,后端返回了组织树,组织树里面可能有组织,也可能有用户,很奇怪的是所有用户都会显示展开图标,而组织有些会显示展开图标,有些不会显示 2.分析 一开始找到了用…...
【Linux】进程查看|fork函数|进程状态
🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁&am…...
LeetCode第98题 - 有效的括号
题目 解答 方案一 class Solution {public boolean isValidBST(TreeNode root) {if (root null) {return true;}if (root.left null && root.right null) {return true;}if (root.left ! null && root.left.val > root.val) {return false;}if (root.…...
ArcGIS实战:从DEM数据到精美立体晕渲图的调色与渲染全流程
1. 认识DEM数据与立体晕渲图 第一次接触DEM数据时,我完全被那些密密麻麻的数字搞懵了。后来才发现,这些数字其实就是地形的"指纹"。DEM(Digital Elevation Model)就像是用数字搭建的微缩景观,每个像素点都记…...
如何快速提升英雄联盟游戏体验:League-Toolkit智能工具完全指南
如何快速提升英雄联盟游戏体验:League-Toolkit智能工具完全指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 英雄联盟作为全球最…...
如何永久保存微信聊天记录?WeChatExporter一站式解决方案
如何永久保存微信聊天记录?WeChatExporter一站式解决方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 在数字时代,微信聊天记录承载着我们的工…...
从一张‘正常’图片到服务器沦陷:文件包含漏洞如何让图片马‘活’过来?
从一张“正常”图片到服务器沦陷:揭秘文件包含漏洞的致命组合攻击 当你深夜检查服务器日志时,发现有人上传了一张普通的风景图。文件头校验通过,MIME类型正确,甚至预览也显示正常。但三天后,这张“图片”却成为攻击者控…...
OpenClaw从入门到应用——工具(Tools):创建技能
通过OpenClaw实现副业收入:《OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南》 简介 OpenClaw 被设计为易于扩展。“技能”是向你的助手添加新能力的主要方式。 什么是技能? 一个技能是一个目录,其中包含一个 SKILL.md…...
娱乐圈天降紫微星终结乱象,海棠山铁哥终结资源咖霸屏时代
资源咖的丧钟,已鸣。 草根王的号角,已响。一、旧秩序罪状书固化霸权三宗罪现场速写1. 资源垄断霸占赛道、包揽曝光、红利通吃2. 圈层护城出身即顶流,背景即通行证3. 劣币驱逐流水线泛滥,原创被碾压,审美被带偏 “无资源…...
Obsidian-Zettelkasten终极指南:20+模板构建你的第二大脑
Obsidian-Zettelkasten终极指南:20模板构建你的第二大脑 【免费下载链接】Obsidian-Templates A repository containing templates and scripts for #Obsidian to support the #Zettelkasten method for note-taking. 项目地址: https://gitcode.com/gh_mirrors/o…...
环境配置与基础教程:多机多卡分布式训练实战:基于 SLURM 集群调度 YOLOv11,大幅缩短训练周期
一、为什么分布式训练是 YOLOv11 落地的“必经之路” 1.1 单卡训练的困境 如果你正在使用 YOLOv11 做目标检测,那么你一定遇到过这个场景:数据集有十万张以上的图片,模型选的是 YOLOv11x,单张 A100 跑一个 epoch 要 40 分钟,完整训练 300 个 epoch 需要整整 8 天。更让人…...
保姆级教程:用STM32F103C8T6的ADC读取MPX4250压力传感器数据(附完整代码)
从零开始:STM32F103C8T6驱动MPX4250压力传感器全流程解析 硬件准备与传感器基础 MPX4250作为工业级压力传感器,其核心优势在于宽量程(20-250kPa)和出色的线性输出特性。这款传感器采用硅压阻技术,内部集成了温度补偿…...
保姆级教程:在Colab上复现C3D论文的UCF101动作识别(附修改后代码与避坑指南)
从零复现C3D:3D卷积实战中的七个关键陷阱与解决方案 当你第一次在Colab上尝试运行C3D代码时,可能会遇到这样的场景:满怀期待地敲下训练命令,却在五分钟内连续遭遇视频帧提取报错、Keras版本冲突和显存不足的三重打击。这正是大多…...
