如果从自己的类中调用,我的代码将返回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
对象中的实例不同。