
本文详解如何对两个10×10整型二维数组进行总和比较,并分别统计其中一位数、两位数和三位数的个数,提供可运行、结构清晰、符合面向对象原则的java实现方案。
本文详解如何对两个10×10整型二维数组进行总和比较,并分别统计其中一位数、两位数和三位数的个数,提供可运行、结构清晰、符合面向对象原则的java实现方案。
在实际开发中,处理多维数组的聚合分析(如求和、分类统计)是常见需求。原问题要求:① 生成两个10×10随机整数数组;② 比较二者元素总和,判定哪个更大;③ 分别统计每个数组中一位数(0–9)、两位数(10–99)、三位数(100–999) 的出现次数。原代码存在方法职责混乱、静态数组耦合过重、逻辑缺失(如未真正计算总和、未实现位数分类)等问题。以下给出专业、可维护、可扩展的重构实现。
✅ 核心设计原则
- 单一职责:每个方法只做一件事(填充、打印、求和、统计位数);
- 参数化:避免硬编码数组名,通过参数传递数组引用;
- 返回值驱动:计算类方法(如sumArray()、countDigits())返回结果,而非依赖静态变量;
- 语义清晰:使用英文标识符,符合国际协作规范。
? 完整可运行代码
import java.util.Random;
public class ArrayAnalyzer {
public static void main(String[] args) {
final int SIZE = 10;
final int RANGE = 1000; // 生成 [0, 999] 的随机数
// 1. 初始化两个二维数组
int[][] array1 = new int[SIZE][SIZE];
int[][] array2 = new int[SIZE][SIZE];
fillRandom(array1, RANGE);
fillRandom(array2, RANGE);
// 2. 打印数组(便于验证)
System.out.println("=== Array 1 ===");
printArray(array1);
System.out.println("\n=== Array 2 ===");
printArray(array2);
// 3. 计算总和并比较
long sum1 = sumArray(array1);
long sum2 = sumArray(array2);
System.out.printf("\n→ Sum of Array 1: %d%n", sum1);
System.out.printf("→ Sum of Array 2: %d%n", sum2);
System.out.println("→ Array with higher sum: " + (sum1 > sum2 ? "Array 1" : sum1 = 0 && val = 10 && val = 100 && val <h3>⚠️ 关键注意事项</h3>
- 数值范围一致性:Random.nextInt(1000) 生成 [0, 999],天然满足1/2/3位数分类前提,无需额外处理负数或超限值;
- 溢出防护:10×10数组最大可能和为 999 × 100 = 99,900,虽在 int 范围内,但为体现工程严谨性,sumArray() 返回 long;
- 位数判定逻辑:严格按数学位数定义(0–9为1位,10–99为2位,100–999为3位),不依赖字符串转换,性能更优;
- 可扩展性提示:若需支持N位数统计或动态范围,可将 countDigits() 改为接收 int minDigits, int maxDigits 参数,并用循环替代硬编码分支。
✅ 总结
本教程不仅解决了原始问题中的“最高和判定”与“位数分类统计”两大核心需求,更通过方法抽象、数据封装与职责分离,将代码提升至生产就绪水平。开发者可直接复用 sumArray() 和 countDigits() 方法于任意二维 int[][] 数组,亦可轻松派生支持浮点、自定义范围或更高维度的变体。记住:清晰的接口、确定的输入输出、无副作用的纯函数,是高质量数组处理代码的基石。
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










