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

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倍速学习&#xff0c;并且关闭弹幕。 数组的定义&#xff1a;数组是一个容器&#xff0c;用来存储一批同种类型的数据。 下述图&#xff1a;是生成数字数组和字符串数组。 为什么有了变量还需要定义数组呢&#xff1f;为了解决在某些场景下&#xff0c;变…...

【C#】知识点实践序列之Lock的锁定代码块

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂之知识点实践序列》文章。 2024年第1篇文章&#xff0c;此篇文章是C#知识点实践序列之Lock知识点&#xff0c;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 本篇验证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缓存击穿、缓存雪崩、缓存穿透

缓存击穿&#xff08;某个热点key缓存失效&#xff09; 概念 缓存中没有但数据库中有的数据&#xff0c;假如是热点数据&#xff0c;那key在缓存过期的一刻&#xff0c;同时有大量的请求&#xff0c;这些请求都会击穿到DB&#xff0c;造成瞬时DB请求量大、压力增大和缓存雪崩的…...

【PCB专题】Allegro封装更新焊盘

在PCB封装的绘制中&#xff0c;有时会出现需要更新焊盘的情况。比如在制作封装的过程中发现焊盘做的不对而使用PAD_Designer重新更新了焊盘。 那在PCB中如何更新已经修改过的焊盘呢&#xff1f; 打开封装&#xff0c;选择Tools->Padstack->Refresh... 选择Refresh all …...

ES6之Reflect详解

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…...

文件监控-IT安全管理软件

文件监控和IT安全管理软件是用于保护企业数据和网络安全的工具。这些工具可以帮助企业监控文件的变化&#xff0c;防止未经授权的访问和修改&#xff0c;并确保数据的安全性和完整性。 一、具有哪些功能 文件监控软件可以实时监控文件系统的活动&#xff0c;包括文件的创建、修…...

达梦数据库安装超详细教程(小白篇)

文章目录 达梦数据库一、达梦数据库简介二、达梦数据库下载三、达梦数据库安装1. 解压2. 安装 四、初始化数据库五、DM管理工具 达梦数据库 一、达梦数据库简介 ​ 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统&#xff0c;简称DM。 达梦数…...

复试 || 就业day09(2024.01.04)算法篇

文章目录 前言验证外星语词典在长度 2N 的数组中找出重复 N 次的元素找到小镇的法官查找共用字符数组的相对排序分发饼干分发糖果区间选点(AcWing)最大不相交区间数量(AcWing)无重叠区间关于重写小于号 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考…...

Win10电脑关闭OneDrive自动同步的方法

在Win10电脑操作过程中&#xff0c;用户想要关闭OneDrive的自动同步功能&#xff0c;但不知道具体要怎么操作&#xff1f;首先用户需要打开OneDrive&#xff0c;然后点击关闭默认情况下将文档保存到OneDrive选项保存&#xff0c;最后关闭在这台电脑上同步设置保存就好了。接下来…...

linux(centos)相关

文件架构&#xff1a; bin--binary--二进制命令&#xff0c;可直接执行 sbin systembin系统二进制命令&#xff0c;超级管理员 lib 库目录 类似dll文件 lib64 64位系统相关的库文件 usr 用户文件 boot 引导分区的文件&#xff0c;链接&#xff0c;系统启动等 dev device设备目录…...

外贸网站显示不安全警告怎么办?消除网站不安全警告超全指南

外贸网站显示不安全警告怎么办&#xff1f;当用户访问你的网站&#xff0c;而您的网站没有部署SSL证书实现HTTPS加密时&#xff0c;网站就会显示不安全警告&#xff0c;这种警告&#xff0c;不仅有可能阻止用户继续浏览网站&#xff0c;影响网站声誉&#xff0c;还有可能影响网…...

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 并未正确安装&#xff0c;或者其可执行文件的路径未包含在系统的 PATH 变量中。 以下是我遇到时解决方法&#xff1a; 确保 Docker 和 Docker Compose 已安装&…...

分享10篇优秀论文,涉及图神经网络、大模型优化、表格分析

引言 第38届AAAI人工智能年度会议将于2024年2月在加拿大温哥华举行。今天给大家分享十篇AAAI2024论文&#xff0c;主要涉及图神经网络&#xff0c;大模型幻觉、中文书法文字生成、表格数据分析、KGs错误检测、多模态Prompt、思维图生成等。 论文获取方式&#xff0c;回复&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连接点方法调用&#xff0c;异常抛出可以增强的点JoinPoint &#xff1a;也就是**被增强的方法的总称&#xff0c;可以获取具体方法的信息&#xff…...

react ant tree节点没有children也会显示展开框 节点有children却不显示展开框

1.背景 最近处理树状结构时遇到了一个诡异问题&#xff0c;后端返回了组织树&#xff0c;组织树里面可能有组织&#xff0c;也可能有用户&#xff0c;很奇怪的是所有用户都会显示展开图标&#xff0c;而组织有些会显示展开图标&#xff0c;有些不会显示 2.分析 一开始找到了用…...

【Linux】进程查看|fork函数|进程状态

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&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.…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...