2011-04-23 2 views
3

내 코드는 자체 클래스 내에서 호출 된 경우 예상대로 entrySet()을 반환합니다. 그러나 Main에서 getter 메서드를 통해 호출하면 빈 테이블이 반환됩니다. 왜?Java Hashtable 질문

class Results 
{ 
    Hashtable<String, Double> langScores ; 

    public Results() 
    { 
     langScores = new Hashtable<String, Double>() ; 
    } 

    public void addScores(double pL1, double pL2, double pL3) 
    { 
     langScores.put("English", pL1) ; 
     langScores.put("French", pL2) ; 
     langScores.put("German", pL3) ; 
     System.out.println(langScores.entrySet()) ; 
    } 

    public Set<Map.Entry<String, Double>> getWinner() 
    { 
     return langScores.entrySet() ; 
    } 
} 
주요

: 당신은 승자의 모든 점수를 넣지 않은 주에서

class LanguageIdentifier 
{ 
    public static void main(String[] args) 
    { 
     Results winner = new Results() ; 

     AnalyseText analyse = new AnalyseText() ; //addScores called from this class 

     analyse.analyseText() ; 
     System.out.println(winner.getWinner()) ; 
    } 
} 

OUTPUT

[German=0.0040, French=0.0030, English=0.02] // print statement within Results class works 

[] // print statement within Main class prints empty table !? 
+0

MAIN 스 니펫에서 addScores()를 어디에서 호출합니까? – sjr

+0

addScores는 AnalyseText 클래스에서 호출되며 필자가 채워진 테이블을 다시 얻으면 올바르게 작동합니다. 또한 Result 클래스의 print 문은 htese 작업을 표시하는 add 문 다음에 있음에 유의하십시오. – raoulbia

+1

그러나 결과를 AnalyseText 클래스에 전달하지 마십시오. getWinner()를 호출하고있는 다른 객체의 addScores()를 호출하고 있습니다. – sjr

답변

2

을 (addScores 사용), 그래서 그것은 여전히 ​​비어 있습니다.

줄을 추가하면 winner.addScores(1, 2, 3);이 나를 대신했습니다. SJR 언급하고 편집에 따라, 당신은 창조의 analyse 개체에 Results 객체에 대한 참조를 전달 매개 변수로 Results 객체를받을 수 AnalyseText 생성자를 변경하고 개인 Result 참조를 설정하지 않는 한

이 객체의 TextAnalyser :

Results winner; 
public TextAnalyser(Results winner) 
{ 
    this.winner = winner; 
} 
+0

감사합니다. 나는 OO 용어로 생각하지 않았고 Hashtable langScores는 Object independent가 될 것이라고 생각했다. – raoulbia

0

main 방법 Results의 인스턴스 AnalyseText 오브젝트의 인스턴스와 가지 다른이므로 이런.

이것은 기본 설정입니다.