我正在尝试计算Java 8中哈希映射的所有值的mod的总和,但未按预期提供。以下是我编写的代码。
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
答案 0 :(得分:2)
我在您发布的代码中发现了两个问题
必须在HashMap
填充后 创建您的迭代器。否则,它将始终为空
Iterator<Integer> itr = countermap.keySet().iterator(); <---- HERE
while (itr.hasNext()) {
System.out.println(itr.next());
mod = itr.next()% 2;
result = result + mod;
}
而且,连续两次调用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