Java如何实现月度降雨量统计与分析

来源:个人站长作者:新井头衔:网络博主
导读:本期聚焦于小伙伴创作的《Java如何实现月度降雨量统计与分析》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Java如何实现月度降雨量统计与分析》有用,将其分享出去将是对创作者最好的鼓励。

在Java程序设计中,月度降雨量统计与分析是常见的数据处理场景,核心是通过合理的数据结构和逻辑实现,完成对原始降雨量数据的加工与结果输出。整个过程可以分为数据准备、核心统计、结果输出三个主要环节,下面逐步展开讲解。

Java如何实现月度降雨量统计与分析

一、数据准备与存储

首先需要明确月度降雨量的数据形式,通常原始数据会包含日期和对应降雨量数值,我们可以先使用数组存储单月的降雨量数据,假设统计的是某自然月31天的数据,可以用double类型数组存储每日降雨量。

如果数据来自外部文件,还需要实现文件读取逻辑,这里先给出基础的数据定义示例:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class RainfallAnalysis {
    // 存储单月31天的降雨量数据,单位:毫米
    private double[] dailyRainfall = new double[31];
    
    // 从CSV文件读取降雨量数据,文件格式为:日期,降雨量
    public void loadDataFromFile(String filePath) throws IOException {
        List<Double> tempList = new ArrayList<>();
        BufferedReader br = new BufferedReader(new FileReader(filePath));
        String line;
        // 跳过表头
        br.readLine();
        while ((line = br.readLine()) != null) {
            String[] parts = line.split(",");
            if (parts.length == 2) {
                try {
                    double rainfall = Double.parseDouble(parts[1]);
                    tempList.add(rainfall);
                } catch (NumberFormatException e) {
                    System.out.println("数据格式错误,跳过该行:" + line);
                }
            }
        }
        br.close();
        // 将数据转移到数组中,不足31天的补0
        for (int i = 0; i < 31; i++) {
            if (i < tempList.size()) {
                dailyRainfall[i] = tempList.get(i);
            } else {
                dailyRainfall[i] = 0.0;
            }
        }
    }
}

二、核心统计功能实现

完成数据加载后,就可以实现各类统计逻辑,常见的统计需求包括总降雨量、平均降雨量、最高/最低降雨量及对应日期、降雨天数统计等。

1. 总降雨量与平均降雨量计算

总降雨量是数组所有元素的和,平均降雨量则是总降雨量除以当月实际有记录的天数,实现代码如下:

// 计算总降雨量
public double getTotalRainfall() {
    double total = 0.0;
    for (double rainfall : dailyRainfall) {
        total += rainfall;
    }
    return total;
}

// 计算平均降雨量,排除无降雨的0值天数
public double getAverageRainfall() {
    double total = 0.0;
    int validDayCount = 0;
    for (double rainfall : dailyRainfall) {
        if (rainfall > 0) {
            total += rainfall;
            validDayCount++;
        }
    }
    if (validDayCount == 0) {
        return 0.0;
    }
    return total / validDayCount;
}

2. 最高与最低降雨量查询

遍历数组找到最大值和最小值,同时记录对应的日期索引,实现代码如下:

// 获取最高降雨量及对应日期(日期从1开始)
public String getMaxRainfallInfo() {
    double max = dailyRainfall[0];
    int maxDay = 1;
    for (int i = 1; i < dailyRainfall.length; i++) {
        if (dailyRainfall[i] > max) {
            max = dailyRainfall[i];
            maxDay = i + 1;
        }
    }
    return "最高降雨量:" + max + "毫米,日期:当月第" + maxDay + "天";
}

// 获取最低降雨量及对应日期(排除0值)
public String getMinRainfallInfo() {
    double min = -1;
    int minDay = -1;
    for (int i = 0; i < dailyRainfall.length; i++) {
        double current = dailyRainfall[i];
        if (current > 0) {
            if (min == -1 || current < min) {
                min = current;
                minDay = i + 1;
            }
        }
    }
    if (min == -1) {
        return "当月无有效降雨记录";
    }
    return "最低降雨量:" + min + "毫米,日期:当月第" + minDay + "天";
}

3. 降雨天数统计

统计降雨量大于0的天数即可,代码如下:

// 统计降雨天数(降雨量>0的天数)
public int getRainyDayCount() {
    int count = 0;
    for (double rainfall : dailyRainfall) {
        if (rainfall > 0) {
            count++;
        }
    }
    return count;
}

三、结果输出与扩展

完成统计后,可以将结果输出到控制台或者写入到结果文件中,以下是输出到控制台的示例:

public void printAnalysisResult() {
    System.out.println("===== 月度降雨量分析结果 =====");
    System.out.println("总降雨量:" + getTotalRainfall() + "毫米");
    System.out.println("平均降雨量:" + getAverageRainfall() + "毫米");
    System.out.println(getMaxRainfallInfo());
    System.out.println(getMinRainfallInfo());
    System.out.println("降雨天数:" + getRainyDayCount() + "天");
}

public static void main(String[] args) {
    RainfallAnalysis analysis = new RainfallAnalysis();
    try {
        // 假设数据文件放在项目根目录的rainfall.csv
        analysis.loadDataFromFile("rainfall.csv");
        analysis.printAnalysisResult();
    } catch (IOException e) {
        System.out.println("读取数据文件失败:" + e.getMessage());
    }
}

如果需要扩展功能,还可以增加降雨量区间统计,比如统计降雨量在0-10毫米、10-25毫米、25毫米以上的天数,只需要遍历数组判断数值区间即可。另外如果处理多月的降雨量数据,可以将单月的数据封装成对象,再用集合存储多个月的对象进行跨月分析。

实际开发中还需要注意数据合法性校验,比如降雨量不能为负数,文件读取时的路径异常处理,避免程序因为异常数据崩溃。掌握这类基础的数据统计逻辑后,也可以迁移到其他类似的数据分析场景中,比如气温统计、销量统计等。

Java月度降雨量统计数据分析数组操作文件读写修改时间:2026-07-07 20:36:30

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。