亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用迭代器循環遍歷 Hashmap

使用迭代器循環遍歷 Hashmap

動漫人物 2022-07-20 21:07:38
我正在嘗試計算 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


查看完整回答
反對 回復 2022-07-20
  • 1 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號