user425727
user425727

Reputation:

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

OUTPUT

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

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

Upvotes: 3

Views: 162

Answers (2)

jotapdiez
jotapdiez

Reputation: 1466

This happens because the instance of Results in the main method is diferent as the instance in AnalyseText object.

This is OO basic.

Upvotes: 0

MByD
MByD

Reputation: 137272

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

Upvotes: 2

Related Questions