2016-12-20 11 views
0

私は簡単な質問があります。私は私の問題のためにとても絶望的です。 私はループを使って、同じ値で異なるキーをマップに配置したいだけです。 私のメインは関数einfuegen()を複数回実行します。次のコードブロックのように:ループ内でのMap.put(String、Integer)の使用

Woerterbuch woerterbuch2 = new Woerterbuch2(); 
for (Medium m : medienliste) { 
    for (String s : m.getWorte()) { 
     woerterbuch2.einfuegen(s); 
    } 
} 

ところで、私は変数のすべてのループと割り当てをテストしました。

今すぐeinfuegen()には、すべての文字列sをマップに入れる必要があります。次のコードブロックを参照してください:

public class Woerterbuch2 implements Woerterbuch{ 

    HashMap<String, Integer> liste = new HashMap<>(); 

    public void einfuegen(String word) { 
     // I have deleted all the previous unimportant code 
     liste.put(word, 1); 
    } 
} 

マイマップは唯一の機能einfuegen()が複数回実行されているとwordに割り当てられている複数の異なる文字列があるが、一つのエントリが含まれています。 einfuegen()が50回以上実行されているため、通常はマップに50以上の異なる単語が含まれている必要があります。

1は常にIntegerの同じインスタンスであるため、Javaでは接続が1からwordに上書きされると仮定します。 私は正しいですが、私はまだそれを修正する方法を知らない。

ありがとうございました。 私は本当にそれを楽しみにしています=)

+2

あなたは知っていますか何ローカル変数は? –

+1

@SotiriosDelimanolisは答えです:) – HRgiger

+2

あなたのコードの目的は何ですか?ある単語が本に出現する回数を数えようとしていますか?その場合、あなたの 'einfugen'メソッドは、' word'のたびに '1'のエントリを追加するだけですが、あなたがしたいのはあなたのマップにすでに存在するならばそれをインクリメント(+1)し、それに1を加える。 – mohammedkhan

答えて

0

すべてのあなたのキーのContantを値を持っている場合、それは問題ではありません。しかし、あなたが一定のキーを与えている場合は重要です。すべてのキーが同じ場合は、1つのエントリが作成されます。キーが一意であることを確認するためにコードをデバッグします。

1)m.getWorte()の値を出力し、送信されたすべてのキーが一意であることを確認します。

は、サンプルコードを見てください

エントリが一定である値に関係なく、ハッシュマップで作られており、キーが異なる値にかかわらず同じである場合、エントリはハッシュマップでは無視され、すなわち
HashMap<String, Integer> myMap = new HashMap<>(); 
     myMap.put("s", 1); 
     myMap.put("r", 1); 
     myMap.put("m", 1); 
     System.out.println(myMap); // This prints {r=1, s=1, m=1} 

HashMap<String, Integer> myMap1 = new HashMap<>(); 
    myMap1.put("s", 1); 
    myMap1.put("s", 2); 
    myMap1.put("s", 3); 
    System.out.println(myMap1); // This prints {s=3} 

1

あなたは常にeinfuegenで地図を作成しています。これが問題です。インスタンスlistとしてmap listを宣言します。

例:

Class X{ 

private Map<String, Integer> liste = new HashMap<>(); 


Woerterbuch woerterbuch2 = new Woerterbuch2(); 
for (Medium m : medienliste) { 
    for (String s : m.getWorte()) { 
     woerterbuch2.einfuegen(s); 
    } 
} 

public void einfuegen(String word) { 
    // I have deleted all the previous unimportant code 

    liste.put(word, 1); 
} 
} 
+0

私のコードでは、HashMapをインスタンス変数として宣言しました。 – patrickkr

+0

@patrickkrこの 'Map liste = new HashMap <>();を実行することで毎回新しいマップを作成しているので、常にその中にエントリが1つしかありません。 –

+0

その間違い申し訳ありません。コードを短くしたい。 しかし、私のコードはまだ動作しません。 – patrickkr

関連する問題