цикл через Hashmap с помощью итератора - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь вычислить сумму мод всех значений хэш-карты в Java 8. Но он не обеспечивает, как предполагалось.ниже приведен код, который я написал.

private static int FindPairs(int n,int[] ar) {
    Map<Integer, Integer> countermap=new HashMap<>();
    Iterator<Integer> itr=countermap.keySet().iterator();
    int result =0;
    for(int i=0;i<ar.length;i++) {
        if(countermap.containsKey(ar[i])) {
            countermap.put(ar[i], countermap.get(ar[i])+1);
        }
        else {
            countermap.put(ar[i], 1);
        }
    }
    int mod=0;

    while(itr.hasNext()) {
        System.out.println(itr.next());
        mod=itr.next()%2;
        result=result + mod;
    }
    System.out.println(Arrays.asList(countermap));
    return result;
}

ввод:

ar = {1,2,3,4,5,6,1,3,4,5}

n = 7

вывод:

[{1 = 2, 2 = 1, 3 = 2, 4 = 2, 5 = 2, 6 = 1}]

0

1 Ответ

2 голосов
/ 06 марта 2019

Я обнаружил две проблемы в коде, который вы разместили

  1. Ваш итератор должен быть создан после того, как ваш HashMap был заполнен. В противном случае он всегда будет пустым

    Iterator<Integer> itr = countermap.keySet().iterator(); <---- HERE
    while (itr.hasNext()) {
        System.out.println(itr.next());
        mod = itr.next()% 2;
        result = result + mod;
    }
    
  2. Кроме того, при вызове itr.next() дважды подряд будет просто пропущен один раз. Вы должны вызвать его один раз, сохранить в переменной, а затем использовать дважды, если хотите

    Iterator<Integer> itr = countermap.keySet().iterator();
    while (itr.hasNext()) {               _
        Integer next = itr.next();         |
        System.out.println(next);           }<---- HERE
        mod = next % 2;                   _|
        result = result + mod;
    }
    

С этими изменениями вывод будет следующим

1
2
3
4
5
6
[{1=2, 2=1, 3=2, 4=2, 5=2, 6=1}]
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...