Java Hashtable question
My code returns entrySet() as expected if called from within its own class. However if i call it via a getter method in Main it returns an empty table. Why?
class Results
{
Hashtable<String, Double> langScores ;
public Results()
{
langScores = new Hashtable<String, Double>() ;
}
public void addScores(double pL开发者_如何转开发1, 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()) ;
}
}
OUTPUT
[German=0.0040, French=0.0030, English=0.02] // print statement within Results class works
[] // print statement within Main class prints empty table !?
In your main you didn't put any scores in winner (using addScores
), so it's still empty.
Adding the line winner.addScores(1, 2, 3);
fixed it for me.
As sjr mentioned, and according to your edit, you don't pass a reference to the Results
object to the analyse
object in creation, change the AnalyseText
constructor to receive Results
object as a parameter, and set the private Result
reference of TextAnalyser
to this object:
Results winner;
public TextAnalyser(Results winner)
{
this.winner = winner;
}
This happens because the instance of Results
in the main
method is diferent as the instance in AnalyseText
object.
This is OO basic.
精彩评论