第三章 下 Java数组与函数:高效编程双利器
1 数组当程序中需要存储大量同类型的数据时需要使用“数组”。例如为了保存50个学生的语文考试成绩如果没有数组则需要定义50个变量才能保存50个学生的成绩这非常不方便而如果使用数组则只需要定义一个数组变量即可。1.1 定义数组在Java中定义数组需要两个步骤第一步定义数组变量的名称和数据类型第二步确定数组的元素个数。定义数组变量的名称和数据类型的一般形式是数据类型[] 数组变量名;这里仅仅完成了第一步也就是只定义了数组的数据类型和变量名并没有说明这个数组包含多少个元素。为了说明数组的元素个数需要使用Java的new关键字为数组创建存储空间。确定数组元素个数的一般形式是数组变量名 new 数据类型[元素个数];在使用new关键字创建数组时Java会自动将每个数组元素的值初始化为对应数据类型的默认值数值类型为0布尔类型为false引用类型为null。例如为了定义一个能够保存50个学生语文成绩的数组变量可以使用如下语句float[] scores;scores new float[50];在Java中也可以将定义数组的两个步骤合并为一个步骤如下所示数据类型[] 数组变量名 new 数据类型[元素个数];类似的为了定义一个能够保存50个学生语文成绩的数组变量可以使用如下语句float[] scores new float[50];还可以在定义数组时同时完成对数组元素的初始化数据类型[] 数组变量名 new 数据类型[] {初始值0, 初始值1, ..., 初始值k};或者使用简化形式数据类型[] 数组变量名 {初始值0, 初始值1, ..., 初始值k};采用这种方式定义并初始化数组时大括号里面的元素个数就是数组的元素个数。示例// 方式1先声明后分配空间 int[] numbers1; numbers1 new int[5]; // 方式2声明同时分配空间 int[] numbers2 new int[5]; // 方式3声明同时初始化 int[] numbers3 new int[] {1, 2, 3, 4, 5}; // 方式4简化初始化 int[] numbers4 {1, 2, 3, 4, 5}; // 字符串数组示例 String[] names {张三, 李四, 王五}; // 布尔数组示例 boolean[] flags new boolean[3]; // 默认值都是false1.2 访问数组元素一旦定义了数组并通过“new”关键字确定了数组的元素个数就可以使用“[下标]”运算符访问数组的元素其中“下标”是一个整数值假定数组的元素个数为N那么“下标”取值范围从0、1、2 ...到N-1。public static void main(String[] args) { float[] salary new float[12]; salary[0] 5000.15F; salary[1] 6060.6F; System.out.println(一月份的收入是 salary[0]); System.out.println(二月份的收入是 salary[1]); System.out.println(三月份的收入是 salary[2]); System.out.println(十二月份的收入是 salary[11]); }1.3 使用for each遍历数组元素使用数组类似于定义了多个同名同类型的变量数组的这一特性非常适合用于对数组的遍历访问数组中的每一个元素。当然为了遍历数组中的元素可以使用前面介绍的for循环或者while循环。public static void main(String[] args) { float[] salary {5000.0F, 1234.5F, 6090.5F, 8000F, 6781.5F, 6712.8F, 2312.4F, 3456.7F, 10000.5F, 2111.8F, 4070F, 8760.5F}; float total 0; for(int i0; i12; i) { total salary[i]; } System.out.println(全年的收入是 total); }While循环可以完成相同的任务在Java中为了遍历数组元素还可以使用一种更为简单的方式使用for each循环如下面的例子所示public static void main(String[] args) { float[] salary {5000.0F, 1234.5F, 6090.5F, 8000F, 6781.5F, 6712.8F, 2312.4F, 3456.7F, 10000.5F, 2111.8F, 4070F, 8760.5F}; float total 0; for(float m : salary) total m; System.out.println(全年的收入是 total); }for each的一般形式如下1.4 二维数组在Java中可以定义一维数组当然也可以定义二维数组甚至更高维的数组。二维数组非常类似日常生活中的表格包括数据行和数据列。二维数组的定义二维数组可以看作是一维数组的数组即数组的每个元素又是一个一维数组。定义二维数组的语法如下// 方式1先声明后分配空间 int[][] matrix1; matrix1 new int[3][4]; // 3行4列的二维数组 // 方式2声明同时分配空间 int[][] matrix2 new int[3][4]; // 方式3声明同时初始化 int[][] matrix3 new int[][] { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; // 方式4简化初始化 int[][] matrix4 { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; // 不规则二维数组每行长度不同 int[][] irregular new int[3][]; irregular[0] new int[2]; // 第0行有2个元素 irregular[1] new int[3]; // 第1行有3个元素 irregular[2] new int[4]; // 第2行有4个元素访问二维数组元素访问二维数组元素需要使用两个下标第一个下标表示行索引第二个下标表示列索引。索引从0开始。public class TwoDArrayExample { public static void main(String[] args) { // 定义一个3x3的二维数组 int[][] matrix { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; // 访问特定元素 System.out.println(matrix[0][0] matrix[0][0]); // 输出: 1 System.out.println(matrix[1][2] matrix[1][2]); // 输出: 6 // 修改元素值 matrix[2][1] 88; System.out.println(修改后 matrix[2][1] matrix[2][1]); // 输出: 88 // 遍历二维数组 System.out.println(二维数组所有元素); for (int i 0; i amp;lt; matrix.length; i) { for (int j 0; j amp;lt; matrix[i].length; j) { System.out.print(matrix[i][j] ); } System.out.println(); } // 使用for-each遍历 System.out.println(使用for-each遍历); for (int[] row : matrix) { for (int value : row) { System.out.print(value ); } System.out.println(); } } }二维数组的应用场景表格数据存储如学生成绩表行学生列科目矩阵运算如矩阵加法、乘法等数学运算游戏棋盘如棋盘游戏、扫雷等图像处理像素点可以表示为二维数组示例学生成绩表public class StudentGrades { public static void main(String[] args) { // 3个学生4门科目 double[][] grades { {85.5, 90.0, 78.5, 92.0}, // 学生1的成绩 {76.0, 88.5, 91.0, 79.5}, // 学生2的成绩 {92.5, 87.0, 84.5, 95.0} // 学生3的成绩 }; // 计算每个学生的平均分 System.out.println(学生平均分); for (int i 0; i lt; grades.length; i) { double sum 0; for (int j 0; j lt; grades[i].length; j) { sum grades[i][j]; } double average sum / grades[i].length; System.out.printf(学生%d的平均分: %.2f%n, i 1, average); } // 计算每门科目的平均分 System.out.println(\n科目平均分); for (int j 0; j amp;lt; grades[0].length; j) { double sum 0; for (int i 0; i amp;lt; grades.length; i) { sum grades[i][j]; } double average sum / grades.length; System.out.printf(科目%d的平均分: %.2f%n, j 1, average); } } }2 函数及其调用当程序功能复杂且代码量比较大时可以根据业务功能将程序拆分为多个功能部件称这些功能部件为函数也称为方法。一个Java类可以包含多个函数。函数是规模化程序设计的有力手段可以提高代码的可读性、可维护性和复用性。函数的定义函数定义的基本语法[访问修饰符] 返回类型 函数名(参数列表) { // 函数体 [return 返回值;] }示例判断质数的函数import java.util.Scanner; public class PrimeNumberChecker { /** * 判断一个数是否为质数 * param number 要判断的整数 * return 如果是质数返回true否则返回false */ public static boolean isPrime(int number) { if (number 1) { return false; } // 优化只需要检查到sqrt(number) for (int i 2; i * i number; i) { if (number % i 0) { return false; } } return true; } /** 主函数从键盘接收用户输入判断是否为质数 */ public static void main(String[] args) { Scanner scanner new Scanner(System.in); int input; System.out.println(质数判断程序输入0结束); while (true) { System.out.print(请输入一个整数); input scanner.nextInt(); if (input 0) { System.out.println(程序结束。); break; } if (isPrime(input)) { System.out.println(input 是质数。); } else { System.out.println(input 不是质数。); } } scanner.close(); } }函数调用的优势代码复用相同的功能只需编写一次多处调用模块化将复杂问题分解为小问题每个函数解决一个特定问题可维护性修改功能只需修改一处不影响其他代码可读性通过有意义的函数名代码更易理解更多函数示例public class MathFunctions { // 计算两个数的最大值 public static int max(int a, int b) { return a b ? a : b; } // 计算阶乘 public static long factorial(int n) { if (n 0) { throw new IllegalArgumentException(阶乘不能为负数); } long result 1; for (int i 2; i n; i) { result * i; } return result; } // 计算数组的平均值 public static double average(double[] numbers) { if (numbers null || numbers.length 0) { return 0; } double sum 0; for (double num : numbers) { sum num; } return sum / numbers.length; } // 打印数组 public static void printArray(int[] array) { System.out.print([); for (int i 0; i array.length; i) { System.out.print(array[i]); if (i array.length - 1) { System.out.print(, ); } } System.out.println(]); } public static void main(String[] args) { // 调用max函数 System.out.println(5和8的最大值是 max(5, 8)); // 调用factorial函数 System.out.println(5的阶乘是 factorial(5)); // 调用average函数 double[] scores {85.5, 90.0, 78.5, 92.0}; System.out.println(平均分是 average(scores)); // 调用printArray函数 int[] numbers {1, 2, 3, 4, 5}; printArray(numbers); } }函数参数传递值传递基本数据类型int, double, boolean等传递的是值的副本引用传递数组和对象传递的是引用的副本可以修改原对象内容public class ParameterPassing { // 基本数据类型 - 值传递 public static void modifyValue(int x) { x 100; // 修改的是副本不影响原值 } // 数组 - 引用传递 public static void modifyArray(int[] arr) { if (arr.length gt; 0) { arr[0] 999; // 修改会影响原数组 } } public static void main(String[] args) { int num 10; System.out.println(修改前num num); // 输出: 10 modifyValue(num); System.out.println(修改后num num); // 输出: 10未改变 int[] numbers {1, 2, 3}; System.out.println(修改前numbers[0] numbers[0]); // 输出: 1 modifyArray(numbers); System.out.println(修改后numbers[0] numbers[0]); // 输出: 999已改变 } }3 案例学生成绩计算系统全班有20个学生近期进行了数学课阶段考试需要编写一个Java程序对成绩进行统计。编写一个程序首先输入全班的考试成绩然后计算并输出学生成绩的最高分、最低分和平均分。要输入和保存20个学生的数学成绩最好的方式就是定义一个float类型的数组变量并指定数组的元素个数为20当然也需要定义保存最高成绩、最低成绩和平均成绩的变量。之后使用for循环或者while循环提示输入成绩在输入成绩的同时计算成绩的最高分、最低分和平均分。package org.example; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); float[] scores new float[20]; float max -10.F, min 200.0F, avg 0.0F; for(int i0; i20; i) { System.out.println(请输入第 i 个学生的成绩); scores[i] sc.nextFloat(); if (max scores[i]) max scores[i]; if (min scores[i]) min scores[i]; avg avg scores[i]; } avg avg / 20; System.out.println(最高分 max); System.out.println(最低分 min); System.out.println(平均分 avg); } }4 全文总结本文系统介绍了Java中数组和函数的核心概念与应用。首先详细讲解了数组的定义、访问、遍历包括for-each循环以及二维数组的使用通过多个代码示例展示了数组在实际编程中的应用。接着深入探讨了函数的定义、调用、参数传递机制及其在代码复用、模块化、可维护性和可读性方面的优势。最后通过学生成绩计算系统案例将数组与函数知识结合演示了如何解决实际问题。文章内容由浅入深理论与实践结合为Java初学者提供了全面的学习指导。

相关新闻

嵌入式第三天

嵌入式第三天

今日学习内容:C语言变量规范、表达式与类型转换、全套运算符、优先级规则,以及字符IO、scanf/printf格式化输入输出,同时弄懂了左值右值、内存赋值规则,并且可以用getchar/putchar完成字符处理的实操。 一、变量的定义、命名与初始…

2026/7/23 6:24:34 阅读更多 →
本人亲测,森优时铁锌维,可以治疗白发

本人亲测,森优时铁锌维,可以治疗白发

首先明确一点,营养素补充剂不能替代药物治疗白发问题,本人亲测,森优时铁锌维,可以对成年人群营养不均衡、压力熬夜导致的白发增多提供有效的营养支持,对改善发根灰白有一定的辅助作用,并非药物治疗。一、本…

2026/7/23 6:24:34 阅读更多 →
为什么 AREA 要指定 CODE 或 DATA 属性?

为什么 AREA 要指定 CODE 或 DATA 属性?

难度:★ 本文首发于我的嵌入式技术公众号「OneChan」,未经授权禁止转载。 打开任何一个 Keil 启动文件,你都会看到这样的代码: AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE 0x400 __initial_spAREA RESET, DATA, READONLY __Vectors DCD …

2026/7/23 6:24:34 阅读更多 →

最新新闻

给视频文件做手机号验证观看(观看权限设定)和代码调用例子

给视频文件做手机号验证观看(观看权限设定)和代码调用例子

1、给视频文件做手机号验证观看(观看权限设定)这种方式适合将一批视频课程授权给特定部门或特定人员观看。注册与上传:首先注册并登录酷播云账号,将需要授权的视频文件上传至平台。创建视频专栏:在后台点击“新建专栏”…

2026/7/23 22:35:26 阅读更多 →
Kimi K3横空出世!中国AI模型仅用几周便反超美国,市场震动,闭源模型岌岌可危!

Kimi K3横空出世!中国AI模型仅用几周便反超美国,市场震动,闭源模型岌岌可危!

上个周末,Kimi K3的发布占领了海外AI圈。 一个还没有成为世界第一的中国模型,却让开发者、投资人和整个市场同时紧张起来。有人测试它的能力,有人拿它挑战Claude;有人担心闭源模型的生意;还有人已经拿它讨论中美AI竞争…

2026/7/23 22:35:26 阅读更多 →
OpenHarmony 小鸿 AI 开发实战 02:从板级源码读懂 WS63、CI1302、ST7789 与外部 Flash

OpenHarmony 小鸿 AI 开发实战 02:从板级源码读懂 WS63、CI1302、ST7789 与外部 Flash

第 01 篇已经确认当前小鸿本体走的是 xiaohong 这条 WS63/OpenHarmony 主线。继续开发之前,还要把板级源码中的引脚、总线和器件职责理清,否则很容易把一个 GPIO 当成普通按键、把两类 Flash 混成同一存储空间,或者在 LCD 与外部 Flash 共享 …

2026/7/23 22:35:26 阅读更多 →
企业级NAS建设方案

企业级NAS建设方案

一、项目概况 1、 背景与建设初衷 我司目前员工规模在 100 人以内。随着公司业务的快速发展,技术研发、产品运营及日常管理中所产生的内部资产资料急剧增加,企业内部资料的集中管理、权限划分与高效流转需求日益凸显。 为了打破数据孤岛,提升…

2026/7/23 22:35:26 阅读更多 →
老板必看!AI落地就做这两件事,ROI瞬间翻倍!

老板必看!AI落地就做这两件事,ROI瞬间翻倍!

老板看AI,最关心的应该就是能不能帮我提升效率和降低成本,而不是你做了多少个AI对话,或者弄了多少个skill。 所以营销 Agent 和行政 Agent 的落地,不能从“我们要做一个智能体”开始,而要从一张账单开始:这…

2026/7/23 22:35:26 阅读更多 →
一.函数与极限2

一.函数与极限2

*极限 数列极限*经典极限方法:抓大头/分离常数/生活例子 极限看的是趋势,而不是差值!抓大头:分离常数:公式法(取整):*函数极限定义 自变量趋于有限值时的函数的极限左右极限最常见需…

2026/7/23 22:34:26 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻