2

この問題に悩まされています: 文字列のリストをパラメーターとして受け取り、単一の文字列がリストに少なくとも 3 回出現する場合に true を返し、それ以外の場合は false を返すメソッド contains3 を作成する必要があります。地図を使う必要があります。

単語のインスタンスが 3 つある場合でも、true は返されません。問題が発生した場所を特定するのに苦労しています。

これが私が持っているものです:

private static boolean contains3(List<String> thing) {
    Map<String, Integer> wordCount = new TreeMap<String, Integer>();
    for (String s: thing) {
        String word = s;

        if (wordCount.containsKey(word)) { // seen before.
            int count = wordCount.get(word);
            wordCount.put(word, count + 1);
        } else {
            wordCount.put(word, 1); // never seen before.
        }

        if (wordCount.containsValue(3)) {
            return true;
        } else {
            return false;
        }

    }
    return false;
}
4

5 に答える 5

2

次のコードを使用してみてください。

private static boolean contains3(List<String> thing) {
    Map<String, Integer> wordCount = new TreeMap<String, Integer>();
        thing.add("hi");
        thing.add("hi");
        thing.add("hi");
        thing.add("hia");
        thing.add("hi3");
        for (String s: thing) {
            String word = s;

            if (wordCount.containsKey(word)) { // seen before.
                int count = wordCount.get(word);
                wordCount.put(word, count + 1);
            } else {
                wordCount.put(word, 1); // never seen before.
            }
        }
            if (wordCount.containsValue(3)) {
                return true;
            } else {
            return false;}
于 2013-10-12T05:23:47.627 に答える
1

置く

if (wordCount.containsValue(3)) {
        return true;
    } else {
        return false;
    }

for ループの外側

于 2013-10-12T05:23:50.550 に答える
0

最初の if ブロックで count が >= 3 かどうかをチェックする方がはるかに効率的です

   if (wordCount.containsKey(word)) { // seen before.
        int count = wordCount.get(word) + 1;
        if(count >= 3) {
              return true;
        }
        wordCount.put(word, count);
    }

次のif elseブロックを削除します

    if (wordCount.containsValue(3)) {
        return true;
    } else {
        return false;
    }
于 2013-10-12T05:29:27.803 に答える