java中有10个人,每年每月都要有数据,结果只有两个人上传了数据,该怎么补全到每年每月每个人都有数据
时间: 2024-03-11 22:48:18 浏览: 69
如果只有两个人上传了数据,那么我们需要根据这两个人上传的数据来推算出其他人的数据。具体步骤如下:
1. 计算每个人每年的总数据量。
2. 将每个人每年的总数据量平均分配到每个月上。
3. 对于每个没有上传数据的人,按照平均分配的数据量来填充每个月的数据。
下面是一个示例代码,假设已经有了两个人的数据:
```java
Map<String, Map<String, Double>> data = new HashMap<>();
Map<String, Double> person1 = new HashMap<>();
person1.put("2020-01", 100.0);
person1.put("2020-02", 50.0);
person1.put("2020-03", 80.0);
person1.put("2020-04", 120.0);
person1.put("2020-05", 90.0);
person1.put("2020-06", 110.0);
data.put("person1", person1);
Map<String, Double> person2 = new HashMap<>();
person2.put("2020-01", 80.0);
person2.put("2020-02", 120.0);
person2.put("2020-03", 60.0);
person2.put("2020-04", 100.0);
person2.put("2020-05", 110.0);
person2.put("2020-06", 70.0);
data.put("person2", person2);
```
接下来,我们可以按照上述步骤来补全数据:
```java
// 计算每个人每年的总数据量
Map<String, Double> totals = new HashMap<>();
for (String person : data.keySet()) {
Map<String, Double> personData = data.get(person);
double total = 0.0;
for (Double value : personData.values()) {
total += value;
}
totals.put(person, total);
}
// 将每个人每年的总数据量平均分配到每个月上
Map<String, Double> averages = new HashMap<>();
for (String month : data.get("person1").keySet()) {
double total = 0.0;
int count = 0;
for (String person : data.keySet()) {
Map<String, Double> personData = data.get(person);
if (personData.containsKey(month)) {
total += personData.get(month);
count++;
}
}
double average = count == 0 ? 0.0 : total / count;
averages.put(month, average);
}
// 对于每个没有上传数据的人,按照平均分配的数据量来填充每个月的数据
for (String person : data.keySet()) {
Map<String, Double> personData = data.get(person);
for (String month : averages.keySet()) {
if (!personData.containsKey(month)) {
double average = averages.get(month);
double total = totals.get(person);
double value = average * (total / (12 * average));
personData.put(month, value);
}
}
}
```
这样,就可以将每个人每年每月的数据补全了。
阅读全文