2014-06-29 65 views
1

我的程序旨在通過反覆打印隨機生成的行來創建隨機詩。 我有有它運行在一個場線一類名爲行:當試圖打印StringBuilder類型時出現奇怪的輸出:「[email protected]」

private StringBuilder line = new StringBuilder(); 

的構造是這樣的:

public Line(int length, String pathOfWordList) throws IOException { 
    this.length = length; 
    populateLine(length, pathOfWordList); 
} 

單詞列表有三種類型的詞:名詞動詞和形容詞,每個人都有被選中的概率。

populateLine選擇並準備要添加到StringBuilder行的單詞。單詞是類Word的對象,並且有兩個字段:

private Type wordType; 
private String word; 

其中Type是具有三種字類型的枚舉。

填充行然後通過調用調用方法的方法添加該單詞。 第一種方法有此簽名:

// currentWord is the word that we have to insert after. 
// wordList is the word bank we draw from. 
// line is the line we are working with. 
// The last two doubles are the probabilities of the three types of words. 
// The third one can be inferred 
private void getNextWord(Word currentWord, WordList wordList, 
     StringBuilder line, double nounProb, double verbProb) 

這種方法包含了許多調用這個方法的循環:

// Adds a word to the line and updates its type 
// Used by getNextWord 
private void loopHelper(Word currentWord, Type type, WordList wordList, 
     StringBuilder line) { 
    currentWord.setType(type); 
    currentWord.setWord(wordList.getWord(type)); 
    line.append(" " + currentWord); 
} 

最後用於測試目的我已經打印出該行的方法:

public void printPoemLine() { 
    System.out.println(this.line.toString()); 
} 

但是,當我實例化和調用該方法,我得到這個奇怪的輸出線:

[email protected] [email protected] [email protected] [email protected] [email protected] [email protected] 

有人能告訴我那是什麼嗎?我只在互聯網上發現了另外一篇文章,它有這種類型的輸出,它處理的是類型擦除,但我不確定這適用於此。

+2

提供一個'的ToString()'實現'Word'。它現在向您顯示在「Object」中指定的默認值,而您想要定義實際有意義的內容。 –

+0

我這樣做是通過使用@Override註釋並定義toString()方法嗎? – jeanluc

+0

是的,確切地說。註釋不是必需的,但肯定是鼓勵的,因爲如果你在方法定義中犯了一個錯誤,它會給你一個錯誤。 –

回答

1

這樣做:

line.append(" " + currentWord); 

你含蓄調用currentWord.toString()返回,默認情況下,看起來像字符串:[email protected]
這是<the name of the class>@<hash-code of the object>