2016-12-20 1 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에서 word으로 연결을 덮어 쓰는 이유는 1이 항상 Integer 인스턴스와 같기 때문입니다. 내가 옳다면 나는 아직도 그것을 고치는 법을 모른다.

도움 주셔서 감사합니다. 나는 정말로 기대하고있다. =)

+2

당신은 알고 계십니까 무엇 지역 변수는? –

+1

@SotiriosDelimanolis 대답 : – HRgiger

+2

코드 목적은 무엇입니까? 책에 단어가 나타나는 횟수를 계산하려고하십니까? 'einfugen' 메쏘드가'word'에 매번'1 '의 항목을 추가한다고 가정하면, 당신이 원하는 것은 당신의지도에 이미 존재한다면 +1하고, 그것에 1. – mohammedkhan

답변

0

당신이 모든 키의 상수 값을 가질 경우 문제가되지 않습니다. 그러나 당신이 일정한 키를 주면 중요합니다. 모든 키가 동일하면 하나의 항목이 만들어집니다. 코드가 고유한지 확인하십시오.

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에서지도를 만들고있다. 이게 문제 야. map liste를 인스턴스 변수로 선언하십시오.

예 :

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 <>();을 사용하면 매번 새로운'Map'을 생성하게되므로 항상 그 안에 하나의 엔트리 만 있습니다. –

+0

그 실수로 죄송합니다. 코드를 더 짧게하고 싶었습니다. 하지만 내 코드는 여전히 작동하지 않습니다. – patrickkr

관련 문제