Java哈希表问题



如果从自己的类中调用,我的代码将返回entrySet()。然而,如果我通过一个getter方法在Main中调用它,它返回一个空表。为什么?

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

输出
[German=0.0040, French=0.0030, English=0.02] // print statement within Results class works
[] // print statement within Main class prints empty table !?

在你的主菜单中,你没有在winner(使用addScores)中输入任何分数,所以它仍然是空的。

添加winner.addScores(1, 2, 3);行为我修复了它。

正如sjr提到的,根据你的编辑,你在创建的时候不把对Results对象的引用传递给analyse对象,把AnalyseText的构造函数改为接收Results对象作为参数,把TextAnalyser的私有Result引用设置为这个对象:

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

这是因为main方法中的Results实例与AnalyseText对象中的实例不同。

最新更新