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";
}
}
结果展示
以下是使用上述代码生成的状态图和饼状图:
stateDiagram-v2
A[0-10] : 2
B[11-20] : 3
C[21-30] : 2
D[31-40] : 2
E[41-50] : 1