Java统计每个年龄段的人数:一个实际问题的解决方案

在许多实际应用场景中,如市场调研、人口统计、健康数据分析等,我们经常需要对不同年龄段的人数进行统计。本文将通过Java编程语言,介绍如何实现这一功能,并提供一个实际的示例。

问题描述

假设我们有一个包含人员年龄的列表,我们需要统计每个年龄段(例如:0-10岁、11-20岁、21-30岁等)的人数,并以图形化的方式展示结果。

解决方案

1. 数据结构设计

首先,我们需要定义一个合适的数据结构来存储每个年龄段的人数。在Java中,我们可以使用HashMap来实现这一点,其中键是年龄段的字符串表示,值是该年龄段的人数。

2. 年龄段划分

接下来,我们需要定义一个方法来根据给定的年龄划分年龄段。这里我们使用一个简单的规则:0-10岁为一个年龄段,11-20岁为另一个年龄段,依此类推。

3. 统计方法实现

我们将实现一个方法,它接受一个包含年龄的列表,然后遍历这个列表,根据年龄划分年龄段,并更新HashMap中相应年龄段的人数。

4. 结果展示

最后,我们将使用状态图和饼状图来展示统计结果。

示例代码

以下是实现上述功能的Java代码示例:

import java.util.*;

public class AgeGroupCounter {
    public static void main(String[] args) {
        List<Integer> ages = Arrays.asList(25, 15, 45, 12, 5, 30, 22, 35, 18, 7);
        HashMap<String, Integer> ageGroups = countAgeGroups(ages);
        System.out.println("Age groups and their counts: " + ageGroups);

        // 状态图展示
        String stateDiagram = "stateDiagram-v2\n" +
                "    A[0-10] : " + ageGroups.get("0-10") + "\n" +
                "    B[11-20] : " + ageGroups.get("11-20") + "\n" +
                "    C[21-30] : " + ageGroups.get("21-30") + "\n" +
                "    D[31-40] : " + ageGroups.get("31-40") + "\n" +
                "    E[41-50] : " + ageGroups.get("41-50") + "\n" +
                "    A --> B\n" +
                "    B --> C\n" +
                "    C --> D\n" +
                "    D --> E\n";
        System.out.println(stateDiagram);

        // 饼状图展示
        String pieChart = "pie title Age Group Distribution\n" +
                "    \"0-10\" : " + ageGroups.get("0-10") + "\n" +
                "    \"11-20\" : " + ageGroups.get("11-20") + "\n" +
                "    \"21-30\" : " + ageGroups.get("21-30") + "\n" +
                "    \"31-40\" : " + ageGroups.get("31-40") + "\n" +
                "    \"41-50\" : " + ageGroups.get("41-50");
        System.out.println(pieChart);
    }

    public static HashMap<String, Integer> countAgeGroups(List<Integer> ages) {
        HashMap<String, Integer> ageGroups = new HashMap<>();
        for (int age : ages) {
            String group = getAgeGroup(age);
            ageGroups.put(group, ageGroups.getOrDefault(group, 0) + 1);
        }
        return ageGroups;
    }

    public static String getAgeGroup(int age) {
        if (age <= 10) return "0-10";
        if (age <= 20) return "11-20";
        if (age <= 30) return "21-30";
        if (age <= 40) return "31-40";
        return "41-50";
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.

结果展示

以下是使用上述代码生成的状态图和饼状图:

stateDiagram-v2
    A[0-10] : 2
    B[11-20] : 3
    C[21-30] : 2
    D[31-40] : 2
    E[41-50] : 1