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]
有人能告訴我那是什麼嗎?我只在互聯網上發現了另外一篇文章,它有這種類型的輸出,它處理的是類型擦除,但我不確定這適用於此。
提供一個'的ToString()'實現'Word'。它現在向您顯示在「Object」中指定的默認值,而您想要定義實際有意義的內容。 –
我這樣做是通過使用@Override註釋並定義toString()方法嗎? – jeanluc
是的,確切地說。註釋不是必需的,但肯定是鼓勵的,因爲如果你在方法定義中犯了一個錯誤,它會給你一個錯誤。 –