我正在嘗試計算 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
1 回答

臨摹微笑
TA貢獻1982條經驗 獲得超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
添加回答
舉報
0/150
提交
取消