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和算法等,欢迎在评论区留言

助力每一个梦想:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ZigBee协议栈 -- 协议栈版本与IAR版本适配说明(Zstack2.5.1a + IAR10.30.1)

文章目录 协议栈安装工程适配 在讲到ZigBee协议栈的文章中所用的协议栈版本是Zstack2.5.1a&#xff0c;对于Zstack2.5.1a运行在IAR8.10中是可以完全适配进行编译开发的&#xff0c;现在较新版本的IAR都是10的版本以上了&#xff0c;有部分开发者习惯使用最新版本来获得更好的开…

正则表达式的语法

如果要想灵活的运用正则表达式&#xff0c;必须了解其中各种元素字符的功能&#xff0c;元字符从功能上大致分为&#xff1a; 限定符 选择匹配符 分组组合和反向引用符 特殊字符 字符匹配符 定位符 我们先说一下元字符的转义号 元字符(Metacharacter)-转义号 \\ \\ 符号…

关于系统设计的一些思考

0.前言 当我们站在系统设计的起点&#xff0c;面对一个新的需求&#xff0c;我们该如何开始呢&#xff1f;这是许多处于系统分析与设计领域的新手常常思考的问题。有些人可能会误以为&#xff0c;只要掌握了诸如面向对象、统一建模语言、设计模式、微服务、Serverless、Servic…

《操作系统导论》笔记

操作系统三个关键&#xff1a;虚拟化( virtualization) 并发(concurrency) 持久性&#xff08;persistence&#xff09; 1 CPU虚拟化 1.1 进程 虚拟化CPU&#xff1a;许多任务共享物理CPU&#xff0c;让它们看起来像是同时运行。 时分共享&#xff1a;运行一个进程一段时间…

前端常用的几种算法的特征、复杂度、分类及用法示例演示

算法&#xff08;Algorithm&#xff09;可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤&#xff0c;或者看成按照要求设计好的有限的确切的计算序列&#xff0c;并且这样的步骤和序列可以解决一类问题。算法代表着用系统的方法描述解决问题的策略机制&#xff0c…

嵌入式Linux之MX6ULL裸机开发学习笔记(IMX启动方式-启动设备的选择)

一,硬件启动方式选择 1.启动方式的选择 6ull支持多种启动方式。 比如可以从 SD/EMMC、 NAND Flash、 QSPI Flash等启动。 6ull是怎么支持多种外置flash启动程序的。 1.启动方式选择&#xff1a; BOOT_MODE0 and BOOT_MODE1&#xff0c;这两个是两个IO来控制的&#xff0c;…

C#上位机与欧姆龙PLC的通信09----开发专用的通讯工具软件(Winform版)

1、介绍 上节文章已经完成了通讯库的开发&#xff0c;可以看到库还是蛮厉害的&#xff0c;在项目中就可以直接拿来应用&#xff0c;这节要做的就是做一个工具软件&#xff0c;形成自己专业的通讯工具&#xff0c;也是对通讯库的直接利用&#xff0c;本节要写的工具软件是一个w…

【HBase】——优化

1 RowKey设计 重要&#xff1a;一条数据的唯一标识就是 rowkey&#xff0c;那么这条数据存储于哪个分区&#xff0c;取决于 rowkey 处于 哪个一个预分区的区间内&#xff0c;设计 rowkey的主要目的 &#xff0c;就是让数据均匀的分布于所有的 region 中&#xff0c;在一定程度…

如何查找iPhone中所有的应用程序

​ ​ Apple 的 App Store 共有约 200 万个适用于 iPhone 和 iPad 的应用程序。如果您像我们一样&#xff0c;您的 iOS 或 iPadOS 设备上可能有数十个应用程序&#xff0c;但没有机会将它们全部整理好。您很容易忘记主屏幕上应用程序图标的位置。 幸运的是&#xff0c;iPhone…

2024年软件测试行业如何发展呢?测试人该怎么办?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、表面"衰落…

亚马逊店铺遇到账号申诉模版分享

1.表达诚意&#xff0c;先认错再说&#xff1a;我知道&#xff0c;最近我们在Amazon.com上作为卖家的表现已经低于亚马逊和我们自己的质量标准。 2.清楚分明的格式&#xff1a;我们库存管理的混乱导致了延迟发货&#xff0c;更糟糕的是&#xff0c;物品无法使用。当延迟发货和…

杰发科技AC7801——IO模拟IIC注意事项

7801的参考手册没有说清楚 7840说明了用开漏 使用办法

【力扣每日一题】1944队列中可以看到的人数

目录 题目来源 题目描述 示例 提示&#xff1a; 思路分析 总结 代码实现 java实现 c实现 得分情况 java c p.s.吐槽一点无足轻重的事情 题目来源 力扣1944队列中可以看到的人数 题目描述 有 n 个人排成一个队列&#xff0c;从左到右 编号为 0 到 n - 1 。给你以…

jupyter更改默认路径到其它的目录或者到其它的盘 比如D盘

1.打开终端 输入jupyter notebook --generate-config 如下 2.在C:\Users\mb5958\.jupyter路径下 3.用记事本打开它&#xff0c;搜索directory 4.在你想要的路径下新建一个文件夹&#xff0c;如‘D:\jupyterFile’&#xff0c;然后将路径名放在c.NotebookApp.notebook_dir"…

appium自动化问题总结

1、DeprecationWarning: find_element_by_name is deprecated. Please use find_element(byBy.NAME, valuename) instead self.driver.find_element_by_name appium软件查看不到新建session的工具时候&#xff0c;可以下载2020年版本的appim&#xff0c;然后安装下面地址操作配…

leaflet呼吸闪烁效果

leaflet呼吸闪烁效果 1.功能背景 这个效果一把用于点击选中&#xff0c;报警提升效果。 2.功能开发 2.1 marker 这个效果还是很好实现&#xff0c;主要通过计时器设置透明度的组合实现。 function setTargetSelect(e){var i 1var int setInterval(() > {if(!e._map…

从vue小白到高手,从一个内容管理网站开始实战开发第三天,使用Element UI构建页面-登录(一)

上次我们介绍了如何安装Element UI库,这次我们使用Element UI中的组件开始开发我们的页面。 开发之前要先在项目中建立好几个目录,方便我们下面的开发。 一、在项目中创建页面管理目录 1、pages目录(文件夹) 首先在src文件夹下创建一个名为pages的文件夹,该文件夹用来统…

KeyError: ‘mistral‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

打开软件游戏提示缺少msvcp140.dll的解决方法,修复缺少140dll文件的方法

一、msvcp140.dll是什么文件&#xff1f; msvcp140.dll是Microsoft Visual C 2015 Redistributable Package的一部分&#xff0c;它是运行许多Windows应用程序所必需的动态链接库文件之一。它包含了许多C类库&#xff0c;这些类库为开发人员提供了丰富的功能和工具&#xff0c…

罗德与施瓦茨FSVA40信号和频谱分析仪

罗德与施瓦茨FSVA40是一款功能信号和频谱分析仪&#xff0c;适用于从事射频系统的开发、生产、安装和服务的用户。FSVA40信号和频谱分析仪系列始终提供最佳的价格和性能组合&#xff0c;无论是根据最新通信标准测试生产中的无线设备&#xff0c;还是测量低相位噪声、高灵敏度和…