2

問題は、出力に「賢い」という単語が 2 回追加されていることです。同じキーを持つ重複する値が 2 回追加される理由を教えてください。よろしくお願いします。

package HashMap;

import java.util.HashMap;
import java.util.Set;

public class Thesaurus {
    HashMap<String, String> words =new HashMap<String, String>();

    public void add(String x,String y)
    {
        if (!words.containsKey(x))
            words.put(x, y);
        else if (!words.containsValue(y))
            words.put(x, words.get(x) + " " + y + " ");
    }
    public void display()
    {
        System.out.println(words);
    }
    public static void main(String[] args) {
        Thesaurus tc = new Thesaurus();
        tc.add("large", "big");
        tc.add("large", "humoungus");
        tc.add("large", "bulky");
        tc.add("large", "broad");
        tc.add("large", "heavy");
        tc.add("smart", "astute");
        tc.add("smart", "clever");
        tc.add("smart", "clever");

        tc.display();
    }
}

出力

{smart=astute clever  clever , large=big humoungus  bulky  broad  heavy }
4

1 に答える 1

4

あなたelse ifが問題です。をチェックしています。これは、存在しない!words.containsValue(y)値があるかどうかをチェックしますclever。しかありませんastute clever。これにより が実行され、その結果、のインデックスに がwords.put(x, words.get(x) + " " + y + " ");追加されます。cleversmart

あなたのadd方法は、複数ではなく、単一の単語の値の一意性のみを保証できます。

HashMapこれは、単語を as として再定義HashMap<string, HashSet<string>>し、そのクラスのメソッドを使用することで解決できます。displayの要素を出力するには、メソッドを変更する必要がありますHashSet

于 2012-12-06T00:30:50.550 に答える