2

整数の a と整数の aをパラメーターとしてcounts受け取り、セット内の各値からリスト内のその値の出現回数へのマップを返すメソッドを作成します。ListSet

私の解決策#1:

public static Map<Integer, Integer> counts(List<Integer> list, Set<Integer> set) {
    Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
    Iterator<Integer> i = list.iterator();

    for(Integer element : set) {
        int count = 0;
        for(Integer sub : list) {
            if(sub == element) {
                count++;
            }
        }
        map.put(element, count);
    }

    return map;
}

私の解決策#2:

public static Map<Integer, Integer> counts(List<Integer> list, Set<Integer> set) {
    Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
    Iterator<Integer> i = list.iterator();

    for(Integer element : set) {
        int count = 0;
        while(i.hasNext()) {
            if(i.next() == element) {
                count++;
            }
        }
        map.put(element, count);
    }

    return map;
}

入力:

list: [4, -2, 3, 9, 4, 17, 5, 29, 14, 87, 4, -2, 100]
set: [-2, 4, 29]

期待される出力:

{-2=2, 4=3, 29=1}

#1の出力:

{-2=2, 4=3, 29=1}

#2 の出力:

{-2=0, 4=3, 29=0}

最初のものは機能しますが、2 つ目は機能しません。なんで?それらは本質的に同じものですか、それとも何か不足していますか? また、forループを使用してリストをトラバースできますか? そうでない場合、なぜですか?

4

1 に答える 1

5

各ループの後にイテレータをリセットするのを忘れた場合は、次のことを試してください。

for(Integer element : set) {
    int count = 0;
    i = list.iterator(); // resets the iterator to the first element. 
    while(i.hasNext()) {
        if(i.next() == element) {
            count++;
        }
    } // by the end of this loop the iterator has no next elements, need to reset.
    map.put(element, count);
}
于 2013-02-06T01:28:09.963 に答える