首页 > 解决方案 > 尝试使用来自另一个数组 + 哈希映射的信息创建填充数组的循环

问题描述

我正在尝试准备要在直方图中使用的数据。我想要 2 个阵列,一个是我收集的最高和最低温度中的所有温度。第二个数组将包含每个温度的频率。

int difference是最低和最高温度的差异

Array temp包含收集的温度

HashMap map包含每个温度收集的频率

Array tempGaps包含温度 + 未收集的所有其他温度

Array finalTemps包含每个温度的频率。

我希望实现的目标是两个数组,一个包含所有温度,一个包含每个的频率,它们的索引值是它们彼此对应的值。

public void fillGaps() {
    int j = 0;
    tempGaps = new int[difference];
    finalTemps = new int[difference];
    for (int i = 0; i < difference; i++) {
        tempGaps[i] = temp[0] + i;
        if (tempGaps[i] == temp[j]) {
            finalTemps[i] = map.get(new Integer(tempGaps[i]));
            j++;
        } else {
            finalTemps[i] = 0;
        }
    }
}output: https://pastebin.com/nFCZXFyp

输出:

7 ->1 9 ->1 10 ->1 12 ->1 14 ->2 15 ->1 16 ->1 18 ->2 19 ->1 21 ->1 
TEMP GAPS
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 
FINAL TEMPS
1 0 1 1 0 1 0 2 0 0 0 0 0 0 0

我的 finalTemp 输出在 14 度后停止 - 出现 2 次。它在我放入频率超过 1 的任何数据集之后执行此操作。请帮助!谢谢!!

标签: javaarrayshashmap

解决方案


我不相信你需要这个j变量。这似乎使事情变得混乱,特别是因为 for 循环只是一次传递。相反,从地图中获取值。如果为 null,则赋值为 0,否则,赋值。

public void fillGaps() {       
    tempGaps = new int[difference];
    finalTemps = new int[difference];
    for (int i = 0; i < difference; i++) { //navigate through every temperature
        tempGaps[i] = temp[0] + i; //assign the current temperature
        Integer frequency = map.get(new Integer(tempGaps[i])); //fetch the frequency
        finalTemps[i] = frequency == null ? 0 : frequency; //assign 0 if null, otherwise frequency if not null
    }
}

推荐阅读