Java数组工具类实战:设计不可实例化的静态工具类

实现一个工具类 MathUtils,满足以下要求:
  1. 所有方法均为静态,且该类不能从外部实例化(提示:使用私有构造器)。
  2. 提供三个静态方法:
  • maxArray(int[] arr):返回较大值;
  • minArray(int[] arr):返回较小值;
  • sumArray(int[] arr):返回数组元素之和。
    输入第一行为整数 n(数组长度),第二行为 n 个整数(数组元素),第三行为一个操作指令(maxminsum)。
    对于 maxmin,输出数组中的最大值或最小值;对于 sum,输出数组元素和。

【样例输入】

复制代码
5
3 1 4 1 5
max

【样例输出】

复制代码
5

完整代码如下:

java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i<n; i++){
            arr[i]=sc.nextInt();
        }
        String op = sc.next();
        int re;
        if (op.equals("max")){
            re = MathUtils.maxArray(arr);
        }else if (op.equals("min")){
            re = MathUtils.minArray(arr);
        }else if (op.equals("sum")){
            re = MathUtils.sumArray(arr);
        }else{
            re =0;
        }
        System.out.println(re);
    }
}

class MathUtils{

    private MathUtils(){

    }


    public static int maxArray(int[] arr){
        int max = arr[0];
        for (int i = 1; i< arr.length; i++){
            if (arr[i] > max){
                max = arr[i];
            }
        }
        return max;
    }

    public static int minArray(int[] arr){
        int min =arr[0];
        for (int i = 1; i< arr.length; i++){
            if (arr[i] < min){
                min = arr[i];
            }
        }
        return min;
    }

    public static int sumArray(int[] arr){
        int sum =arr[0];
        for (int i = 1; i< arr.length; i++){
            sum = sum + arr[i];
        }
        return sum;
    }


}

运行测试如下:

代码解释方法

  1. 逐行分析 从代码的第一行开始,逐步阅读每一行代码的功能。理解变量声明、函数定义、循环结构等基本元素的作用。

  2. 功能模块划分 将代码划分为若干功能模块,如输入处理、核心逻辑、输出结果等部分。分析每个模块的输入输出关系。

  3. 变量跟踪 记录代码中所有变量的变化过程,特别是在循环和条件语句中变量的值如何被修改。

  4. 执行流程 绘制代码的执行流程图,明确不同条件下的执行路径和可能的分支情况。

  5. 调试输出 在关键位置添加打印语句,输出中间结果,帮助理解代码的实际执行过程。

代码示例分析

python 复制代码
def calculate_average(numbers):
    total = 0
    count = 0
    for num in numbers:
        total += num
        count += 1
    return total / count if count != 0 else 0
  1. 函数定义 calculate_average函数接收一个numbers参数,表示要计算平均值的数字列表。

  2. 变量初始化 total初始化为0,用于累加所有数字的和;count初始化为0,用于记录数字的个数。

  3. 循环结构 for循环遍历numbers列表中的每个元素,将当前数字加到total中,同时count递增1。

  4. 返回结果 使用条件表达式处理除零情况,当count不为0时返回平均值,否则返回0。

数学公式表示

平均值的计算公式可以表示为:

其中:

  • (x_i) 表示列表中的第i个数字
  • (n) 表示数字的总个数
  • (\sum) 表示求和运算

常见问题排查

  1. 空列表处理 代码已通过条件表达式处理了空列表情况,避免除零错误。

  2. 非数字输入 当前实现假设输入都是数字类型,实际应用中可能需要添加类型检查。

  3. 精度问题 对于大量数据求和可能导致精度损失,可考虑使用更高精度的数值类型。

  4. 性能优化 对于极大列表,Python的内置sum函数可能更高效,但会失去计数验证的灵活性。

相关推荐
码哥字节7 小时前
把 Cursor 的烂输出变成好代码,这 10 个 Prompt 改造让我省了 80% 改稿时间
java·ai编程工具·cursor 配置·prompt 技巧
2503_931712487 小时前
10m/s超高速电梯:西奥XO-NEWIII如何树立行业速度标杆
java·大数据·数据库
月疯7 小时前
np.where()[0]的用法
开发语言·python·numpy
折哥的程序人生 · 物流技术专研7 小时前
第4篇:抽象工厂模式——产品族一键创建
java·设计模式·抽象工厂模式·创建型模式·编程进阶·产品族·扩充系列
正儿八经的少年7 小时前
Spring Boot
java·spring boot·后端
z落落7 小时前
C#五大加密算法(AES、DES、MD5、RSA、SHA)
开发语言·c#
未秃头的程序猿7 小时前
虚拟线程用了一年,我真香了——10倍吞吐量是真实存在的
java·后端·面试
namexingyun7 小时前
Scaling Law bug实战启示:从“虚胖“到“精瘦“的算力效率革命
开发语言·网络·人工智能·bug·ai编程
hnxaoli7 小时前
统信小程序(十六)xls转xlsx
开发语言·python·小程序
孝顺的书包7 小时前
将《C# 调用非托管程序》一文中最后一种方法修改如下(篇幅原因简化了注释):
开发语言·c#