开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜