JavaSE 基础语法 - 数组的定义与使用 - ②
接上节 JavaSE 基础语法 - 数组的定义与使用 - ① 的内容。七、数组元素的访问一个数组包含数组变量数组对象数组元素数组索引。其中数组元素通过索引进行访问。7.1 通过索引访问数组元素数组访问格式数组名[索引]例如int[]nums{10,20,30,40};System.out.println(nums[0]);输出10这里nums[0]表示访问数组中索引为 0 的元素。数组对应关系索引0123↓ ↓ ↓ ↓10203040因此nums[0]-20nums[2]-30注意数组索引从 0 开始。如果想要访问最后一个元素可以使用 数组长度 - 1。7.2 修改数组元素数组元素不仅可以读取也可以修改。例如int[]nums{10,20,30};nums[1]200;System.out.println(nums[1]);输出200执行过程修改前┌─────────────┐ │10│20│30│ └─────────────┘执行nums[1]200;修改后┌───────────────┐ │10│200│30│ └───────────────┘注意修改的是数组对象中的元素。数组长度不会发生变化。7.3 获取数组长度Java 数组提供了length属性。用于获取数组中元素的个数。例如int[]nums{10,20,30,40};System.out.println(nums.length);输出4注意数组长度nums.length不是nums.length()因为length 是数组属性length() 是方法。例如Stringstr.length();数组arr.length;二者不要混淆。八、数组的遍历数组遍历是数组使用中最常见的操作。所谓遍历按照一定顺序访问数组中的每一个元素。例如数组int[]nums{10,20,30};遍历结果102030Java 中数组遍历主要有两种方式普通 for 循环增强 for 循环foreach。8.1 使用普通 for 循环遍历语法for(初始化;条件判断;更新){}数组遍历int[]nums{10,20,30,40};for(inti0;inums.length;i){System.out.println(nums[i]);}执行过程第一次i0nums[0]10第二次i1nums[1]20依次访问10203040为什么使用 length推荐inums.length不要写i4原因如果数组长度改变int[]numsnewint[100];代码仍然可以正常运行。8.2 增强 for 循环foreachJava 提供了一种更加简洁的数组遍历方式。语法for(数据类型 变量:数组){}例如int[]nums{10,20,30,40};for(intnum:nums){System.out.println(num);}输出10203040执行过程第一次num10第二次num20第三次num30第四次num408.3 普通 for 和 foreach 对比比较普通for增强for是否需要索引需要不需要能否修改元素可以不推荐能否倒序遍历可以不可以代码复杂度稍高简单什么情况下使用普通 for例如需要修改数组元素for(inti0;iarr.length;i){arr[i]10;}需要通过索引访问arr[i]什么情况下使用 foreach只是读取数组for(intnum:arr){System.out.println(num);}推荐使用 foreach。九、数组常见异常在平常写代码的时候经常会出现异常。其中最常见的有两个数组越界异常空指针异常。9.1 ArrayIndexOutOfBoundsException中文数组索引越界异常。原因访问了不存在的索引。例如int[]nums{10,20,30};System.out.println(nums[3]);数组长度3合法索引012但是访问nums[3]不存在。因此报错ArrayIndexOutOfBoundsException解决访问数组时不要超过数组长度。尽量使用length-1来确定长度。9.2 NullPointerException中文空指针异常。例如int[]numsnull;System.out.println(nums.length);运行报错NullPointerException为什么因为nums没有指向任何数组对象。访问nums.length相当于访问一个不存在的对象。因此报错。解决创建数组int[]numsnewint[5];或者赋值int[]nums{1,2,3};十、数组练习10.1 数组求和需求计算数组所有元素之和。代码publicstaticintsum(int[]arr){intsum0;for(inti0;iarr.length;i){sumarr[i];}returnsum;}测试int[]nums{10,20,30};System.out.println(sum(nums));结果6010.2 求数组最大值思路假设第一个元素最大然后依次比较。代码publicstaticintmax(int[]arr){intmaxarr[0];for(inti1;iarr.length;i){if(arr[i]max){maxarr[i];}}returnmax;}执行int[]nums{10,50,20,30};结果5010.3 数组元素查找顺序查找需求查找数组中是否存在某个元素。例如查找 30代码publicstaticintsearch(int[]arr,inttarget){for(inti0;iarr.length;i){if(arr[i]target){returni;}}return-1;}返回找到返回索引没找到返回 -1。10.4 数组逆序例如原数组1 2 3 4 5变成 5 4 3 2 1代码publicstaticvoidreverse(int[]arr){for(inti0;iarr.length/2;i){inttemparr[i];arr[i]arr[arr.length-1-i];arr[arr.length-1-i]temp;}}十一、Arrays 工具类Java 提供了一个专门操作数组的工具类java.util.Arrays它提供了大量数组操作方法。使用前需要导入import java.util.Arrays;下面仅介绍几个常用的。11.1 Arrays.toString()作用将数组转换成字符串。例如int[]nums{10,20,30};System.out.println(Arrays.toString(nums));输出[10,20,30]否则直接输出数组System.out.println(nums);结果类似[I1b6d3586这是数组对象地址信息。11.2 Arrays.sort()作用数组排序。例如int[]nums{30,10,20};Arrays.sort(nums);System.out.println(Arrays.toString(nums));结果[10,20,30]默认升序排序。11.3 Arrays.equals()作用比较两个数组内容是否相同。例如int[]a{1,2,3};int[]b{1,2,3};System.out.println(Arrays.equals(a,b));结果true注意不要使用ab因为比较的是地址。11.4 Arrays.copyOf()作用数组复制。例如int[]nums{1,2,3};int[]copyArrays.copyOf(nums,5);结果[1,2,3,0,0]可以用于数组扩容。十二、二维数组12.1 什么是二维数组二维数组本质上是数组中的元素仍然是数组。也就是说二维数组就是一个数组里面存放多个一维数组。例如int[][]arr;可以理解为二维数组 一维数组 ↓[102030]一维数组 ↓[405060]一维数组 ↓[708090]因此二维数组可以表示表格矩阵多组数据。二维数组的应用场景场景一保存学生成绩例如三个学生每个学生三门成绩语文 数学 英语 张三908588李四959290王五807885可以表示为int[][]scores{{90,85,88},{95,92,90},{80,78,85}};场景二棋盘例如五子棋棋盘000000102000100可以使用二维数组保存。12.2 二维数组定义动态初始化语法数据类型[][]数组名new数据类型[行数][列数];例如int[][]arrnewint[3][4];表示创建3 行每行 4 个元素。结构列0123行00000行10000行20000默认值因为是 int 类型所有元素默认0静态初始化语法数据类型[][]数组名{{元素1,元素2},{元素1,元素2}};例如int[][]arr{{1,2,3},{4,5,6},{7,8,9}};表示123456789二维数组元素访问二维数组访问数组名[行索引][列索引]例如int[][]arr{{10,20,30},{40,50,60}};System.out.println(arr[0][1]);执行先找第 0 行10 20 30再找第 1 列20输出20二维数组索引列012行0102030行1405060访问arr[1][2]表示第 2 行第 3 个元素。结果6012.3 二维数组遍历二维数组遍历需要两层循环。原因外层循环控制行。内层循环控制列。普通 for 循环遍历例如publicclassDemo{publicstaticvoidmain(String[]args){int[][]arr{{10,20,30},{40,50,60},{70,80,90}};for(inti0;iarr.length;i){for(intj0;jarr[i].length;j){System.out.print(arr[i][j] );}System.out.println();}}}输出102030405060708090执行过程第一次外层循环i0访问102030第二次i1访问405060foreach 遍历二维数组二维数组本质数组里面套数组。所以可以使用嵌套 foreach。例如int[][]arr{{1,2,3},{4,5,6}};for(int[]row:arr){for(intnum:row){System.out.print(num );}System.out.println();}输出12345612.4 二维数组内存分析例如int[][]arrnewint[2][3];很多人认为二维数组是一整块连续空间。实际上二维数组本质是数组里面存放多个一维数组的引用。创建过程第一步创建外层数组arr它保存两个元素。第二步创建两个一维数组。内存如下图因此二维数组实际上包含一个外层数组多个内层数组。

相关新闻

小白python入门 - 43. 依赖注入与配置管理

小白python入门 - 43. 依赖注入与配置管理

1. 本课定位:是什么、为何重要前几课路由能跑、模型能校验,但项目稍大就会重复:每个接口自己读环境变量、自己解析分页、(很快)自己开数据库会话、(再往后)自己取当前用户。复制粘贴不仅丑&…

2026/7/27 6:45:19阅读更多 →
C++ STL栈与队列模拟实现:从原理到工程实践

C++ STL栈与队列模拟实现:从原理到工程实践

1. 项目概述:为什么我们要亲手模拟实现栈和队列?在C的日常开发中,std::stack和std::queue是标准模板库(STL)里再熟悉不过的容器适配器了。它们封装了底层容器(默认是deque),提供了后…

2026/7/27 6:45:19阅读更多 →
改进蝙蝠算法在无人机3D路径规划中的应用与优化

改进蝙蝠算法在无人机3D路径规划中的应用与优化

1. 无人机3D路径规划的核心挑战与改进方向在复杂三维环境中实现无人机的自主路径规划,一直是智能飞行器领域的核心难题。传统规划方法在动态障碍物规避、实时性要求和能耗优化等方面存在明显短板。我去年参与的一个山区物资配送项目就深刻体会到这点——当无人机需要…

2026/7/27 6:45:19阅读更多 →
大模型推理中的幽灵波动:批不变性缺失与确定性优化

大模型推理中的幽灵波动:批不变性缺失与确定性优化

1. 问题现象:大模型推理中的"幽灵波动" 在本地部署的大模型推理过程中,我发现一个反直觉的现象:即使将温度参数(temperature)设置为0(即完全禁用随机采样),使用相同的输入…

2026/7/27 13:56:52阅读更多 →
BQ78350-R1A BMS芯片PF快照与CEDV电量计实战解析

BQ78350-R1A BMS芯片PF快照与CEDV电量计实战解析

1. 项目概述与核心价值在电池管理系统(BMS)的开发与调试中,最让人头疼的往往不是功能实现,而是故障发生后的“事后诸葛亮”——系统突然保护锁死,电芯电压归零,但你就是不知道在锁死前的那几秒甚至几分钟里…

2026/7/27 13:56:52阅读更多 →
解密eSpeak NG:如何用轻量级引擎实现百种语言的语音合成

解密eSpeak NG:如何用轻量级引擎实现百种语言的语音合成

解密eSpeak NG:如何用轻量级引擎实现百种语言的语音合成 【免费下载链接】espeak-ng eSpeak NG is an open source speech synthesizer that supports more than hundred languages and accents. 项目地址: https://gitcode.com/GitHub_Trending/es/espeak-ng …

2026/7/27 13:56:52阅读更多 →
Smithbox终极指南:从零开始掌握魂系列游戏修改工具

Smithbox终极指南:从零开始掌握魂系列游戏修改工具

Smithbox终极指南:从零开始掌握魂系列游戏修改工具 【免费下载链接】Smithbox Smithbox is a modding tool for Elden Ring, Armored Core VI, Sekiro, Dark Souls 3, Dark Souls 2, Dark Souls, Bloodborne and Demons Souls. 项目地址: https://gitcode.com/gh_…

2026/7/27 13:56:52阅读更多 →
如何在10分钟内让经典Windows游戏在现代系统上完美运行:dxwrapper终极兼容性解决方案

如何在10分钟内让经典Windows游戏在现代系统上完美运行:dxwrapper终极兼容性解决方案

如何在10分钟内让经典Windows游戏在现代系统上完美运行:dxwrapper终极兼容性解决方案 【免费下载链接】dxwrapper Fixes compatibility issues with older games running on Windows 10/11 by wrapping DirectX dlls. Also allows loading custom libraries with th…

2026/7/27 13:56:52阅读更多 →
FPD-Link III汽车摄像头SerDes链路设计:从硬件到软件的实战指南

FPD-Link III汽车摄像头SerDes链路设计:从硬件到软件的实战指南

1. 项目概述:FPD-Link III系统设计的核心挑战与价值在汽车ADAS(高级驾驶辅助系统)和自动驾驶的浪潮中,高清摄像头作为系统的“眼睛”,其数据链路的稳定性和可靠性直接决定了感知系统的性能上限。然而,将一颗…

2026/7/27 13:54:52阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/27 1:14:56阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:24阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:24阅读更多 →
2007-2023年各市区县生态文明建设示范区DID

2007-2023年各市区县生态文明建设示范区DID

数据简介 自改革开放以来,我国依赖高投入、高资源消耗和高污染等传统发展模式实现了经济短期内的快速增长, 然而这也导致了严重的生态环境危机。因此,国家有力于推动企业高质量经济发展,协同生态保护的方针,从而从201…

2026/7/27 0:00:24阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/25 23:03:25阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →