Java重修第一天—学习数组

news2024/11/29 8:52:42

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]);        // 结果为0
        System.out.println(ages[1]);        // 结果为0
        System.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.coloradmin.cn/o/1356508.html

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

相关文章

chromium在中文用户名下无法编译的问题

新电脑没有太注意&#xff0c;起用户名的时候用了中文。 在编译chromium104的代码时&#xff0c;因为环境变量有中文导致编译失败&#xff1a; 因为我的电脑默认是使用gbk编码&#xff0c;而不是utf-8编码。 这个问题有三种解决办法&#xff1a; &#xff08;一&#xff09;把…

【Spark精讲】Spark on Hive性能优化

目录 第一章 1.1 集群配置概述 1.2 集群规划概述 第二章 Yarn配置 2.1 Yarn配置说明 yarn.nodemanager.resource.memory-mb yarn.nodemanager.resource.cpu-vcores yarn.scheduler.maximum-allocation-mb yarn.scheduler.minimum-allocation-mb 第三章 Spark的配置说…

在Ubuntu22.04上部署Stable Diffusion

在AI绘画软件领域Stable-Diffusion&#xff08;简称SD&#xff09;在开源领域绝对是不二之选&#xff0c;他的插件方式可以让此软件具有更多的功能&#xff0c;开发者社群为此提供了大量免费高质量的外接预训练模型&#xff08;fine-tune&#xff09;和插件&#xff0c;并持续维…

深耕汽车检测设备领域,引领行业技术革新

在汽车工业飞速发展的今天&#xff0c;汽车检测技术作为保障车辆安全、提升维修效率的重要手段&#xff0c;日益受到行业内外的高度关注。康士柏汽车检测线设备厂家&#xff0c;作为这一领域的佼佼者&#xff0c;凭借其深厚的技术积累和卓越的产品品质&#xff0c;正引领着行业…

傅里叶级数、傅里叶变换、小波变换、离散余弦变换的理解

目录 1. 傅里叶级数2.傅里叶变换 1. 傅里叶级数 功能&#xff1a;能把任意周期性函数展开成一系列正弦、余弦函数的和。 公式&#xff1a; f ( x ) a 0 2 ∑ n 1 ∞ ( a n cos ⁡ ( 2 π n x T ) b n sin ⁡ ( 2 π n x T ) ) 傅里叶系数 a n 2 T ∫ x 0 x 0 T f ( x )…

即时设计:一键查看设计稿与页面差异,让设计师的工作更便捷高效

设计稿走查 在设计工作中&#xff0c;对设计稿和实际页面进行对比是必不可少的环节。然而&#xff0c;传统的对比方式往往耗时耗力&#xff0c;无法精确测量差异。为了解决这个问题&#xff0c;我们推出了一款强大的工具&#xff0c;它可以通过图片对比&#xff0c;轻松查看设…

【ESP32接入语言大模型之通义千问】

1. 通义千问 讲解视频&#xff1a; ESP32接入语言大模型之通义千问 随着人工智能技术的不断发展&#xff0c;自然语言处理领域也得到了广泛的关注和应用。通义千问由阿里云开发&#xff0c;目标是帮助用户获得准确、有用的信息&#xff0c;解决他们的问题和困惑&#xff0c;也…

Debian12使用Xshell连接失败解决办法详细

1、Debian开启ssh服务 sudo apt update -y sudo apt install ssh2、编辑配置文件 # 安装vim sudo apt install vimvim /etc/ssh/sshd_config3、将#PermitRootLogin prohibit-password的注释去掉&#xff0c;设置为yes 4、将#PasswordAuthentication no的注释去掉&#xff0c;…

爬虫工具(tkinter+scrapy+pyinstaller)

需求介绍输入&#xff1a;关键字文件&#xff0c;每一行数据为一爬取单元。若一行存在多个and关系的关键字 &#xff0c;则用|隔开处理&#xff1a;爬取访问6个网站的推送&#xff0c;获取推送内容的标题&#xff0c;发布时间&#xff0c;来源&#xff0c;正文第一段&#xff0…

进程和计划任务-------后续(二)

一、进程管理 1.进程启动---------- 前台启动与后台启动 进程需要手动启动 前台启动&#xff08;运行&#xff09;&#xff1a;通过终端启动&#xff0c;且启动后一直占据终端&#xff08;影响当先终端的操作&#xff09; 后台启动&#xff1a;可通过终端启动&#xff0c;但启…

【KingbaseES】实现MySql函数Median

本方法只支持在聚合函数窗口中调用 不支持在GROUP BY中使用&#xff0c;使用plsql写的玩意新能都会稍微差一些 建议使用原生方法修改 CREATE OR REPLACE FUNCTION _final_median(numeric[])RETURNS numeric AS $$SELECT AVG(val)FROM (SELECT valFROM unnest($1) valORDER BY …

vue保姆级教程----深入了解 Vue3路由守卫

&#x1f4e2; 鸿蒙专栏&#xff1a;想学鸿蒙的&#xff0c;冲 &#x1f4e2; C语言专栏&#xff1a;想学C语言的&#xff0c;冲 &#x1f4e2; VUE专栏&#xff1a;想学VUE的&#xff0c;冲这里 &#x1f4e2; CSS专栏&#xff1a;想学CSS的&#xff0c;冲这里 &#x1f4…

Power Automate删除SharePoint Online或OneDrive for Business文件版本历史

SharePoint Online和OneDrive for Business支持版本控制&#xff0c;可以保留文件的版本历史&#xff0c;方便用户随时查看和恢复以前的版本。但该功能也会占用大量SharePoint Online或OneDrive for Business存储空间。官方删除版本历史的方法无法批量操作&#xff0c;故今天提…

【linux学习】个人计算机架构

1. 个人计算机架构 个人计算机的架构通常是x86架构&#xff0c;主流的x86架构的CPU供应商主要为Intel。下图为Intel的主机板。 图1.1 主机板及其各组件 主机板上包括的组件有&#xff1a;CPU、主内存&#xff08;RAM&#xff09;、磁盘设备&#xff08;IDE/SATA&#xff09;、…

03-微服务-Ribbon负载均衡

Ribbon负载均衡 1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件&#xff0c;来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1&#xff0c;怎么变成了http://localhost:8081的呢&#xff1f; 1.2.源码跟踪 为什么我们只输入…

2007-2019年中国人口与就业统计年鉴, pdf、xls不定,多项指标可查,可预览后下载

数据名称: 中国人口与就业统计年鉴 数据格式: pdf、xls不定 数据时间: 2007-2019年 数据几何类型: 文本 数据坐标系: —— 数据来源&#xff1a;国家统计局 数据字段: —— 数据预览 目录第一部分 综合数据1-1 分地区年末人口数1-2 按性别分人口数1-3 人口年龄结构…

深入理解CRON表达式:时间调度的艺术

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

解析《个人信息保护法》实施以来主要的变化

文章目录 前言一、二十一部配套的立法二、数据入表三、跨境规则转向四、未成年个人信息保护五、数据交易六、监管创新七、执法全覆盖八、地方聚焦场景执法九、个人信息保护诉讼十、个人信息保护公益诉讼十一、包容审慎十二、双清单上线十三、外部独立监督机构十四、个性化推荐便…

Unity中URP下的线性雾

文章目录 前言一、线性雾 雾效因子二、MixFog1、ComputeFogIntensity 雾效强度计算2、雾效颜色混合 lerp(fogColor, fragColor, fogIntensity); 前言 在之前的文章中&#xff0c;我们实现了URP下的雾效支持。 Unity中URP下的添加雾效支持 在上一篇文章中,我们解析了 URP 下统…

多技术融合在生态系统服务功能社会价值评估中的应用及论文写作、拓展分析

生态系统服务是人类从自然界中获得的直接或间接惠益&#xff0c;可分为供给服务、文化服务、调节服务和支持服务4类&#xff0c;对提升人类福祉具有重大意义&#xff0c;且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目&#xff08;Millennium Ecosystem Asse…