Попытка создать цикл, который заполняет массив, используя информацию из другого массива + хэш-карту - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь подготовить данные для использования внутри гистограммы.Я хочу 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. Пожалуйста, помогите!Спасибо !!

1 Ответ

0 голосов
/ 25 мая 2018

Не думаю, что вам нужна переменная j.Кажется, это сбивает с толку, особенно потому, что цикл for - это всего лишь один проход.Вместо этого получите значение с карты.Если ноль, присвойте 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...