2011-04-23 80 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() ; 
    } 
} 

MAIN:

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()) ; 
    } 
} 

輸出

[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 2011-04-23 23:53:54

+0

addScores從AnalyseText類中調用,並且正確地工作,因爲我得到了一個填充表。另請注意,Result類中的print語句位於add語句之後,用於顯示htese工作。 – raoulbia 2011-04-24 00:00:17

+1

但是,您不會將結果傳遞給AnalyseText類。你在不同的對象上調用addScores()來調用getWinner()。 – sjr 2011-04-24 00:01:37

回答

2

在你的主,你沒有把任何分數獲得者(使用addScores),所以它仍然是空的。

添加行winner.addScores(1, 2, 3);爲我解決了它。

由於SJR提到的,並根據您的編輯,你不傳遞給Results對象以創建analyse對象的引用,改變AnalyseText構造函數接收Results對象作爲參數,並設置專用Result參考的TextAnalyser到該對象:

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

謝謝。我沒有考慮OO術語,並認爲Hashtable langScores將會是Object獨立的 – raoulbia 2011-04-24 00:03:33

0

發生這種情況是因爲Resultsmain方法實例是diferent如AnalyseText對象的實例。

這是OO基本。