我从arraylist获取内存地址,需要信息

我正在拿一个文本文件并填写一个arraylist。 为了测试文件,我在打开之前将其打印出来。 我只能看到内存地址而不是文件中的实际信息。 有什么简单的东西,可能很明显我错过了吗?

public class TriviaQuestion { private String player; private String category; private String question; private String answer; private int score = 0; /** * */ public TriviaQuestion() { player = "unknown"; category = "unknown"; question = "unknown"; answer = "unknown"; score = 0; } public TriviaQuestion(String category, String question, String answer){ } public TriviaQuestion(String player, String category, String question, String answer, int score) { super(); this.player = player; this.category = category; this.question = question; this.answer = answer; this.score = score; } /** * @return the player */ public String getPlayer() { return player; } /** * @param player the player to set */ public void setPlayer(String player) { this.player = player; } /** * @return the category */ public String getCategory() { return category; } /** * @param category the category to set */ public void setCategory(String category) { this.category = category; } /** * @return the question */ public String getQuestion() { return question; } /** * @param question the question to set */ public void setQuestion(String question) { this.question = question; } /** * @return the answer */ public String getAnswer() { return answer; } /** * @param answer the answer to set */ public void setAnswer(String answer) { this.answer = answer; } /** * @return the score */ public int getScore() { return score; } /** * @param score the score to set */ public void setScore(int score) { this.score = score; } } 

测试员

 import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Scanner; public class TriviaQuestionTester { /** * @param args */ public static void main(String[] args) throws IOException { File triviaFile = new File("trivia.txt"); Scanner triviaFile1 = new Scanner(triviaFile); String lastKnownCategory = ""; ArrayList myList = new ArrayList(); while (triviaFile1.hasNextLine()){ String currentLine = triviaFile1.nextLine(); if (!currentLine.isEmpty()) { TriviaQuestion currentQuestion = new TriviaQuestion(currentLine, currentLine, currentLine); if (currentLine.endsWith("?")) { currentQuestion.setCategory(lastKnownCategory); currentQuestion.setQuestion(currentLine); currentQuestion.setAnswer(triviaFile1.nextLine()); } else { currentQuestion.setCategory(currentLine); currentQuestion.setQuestion(triviaFile1.nextLine()); currentQuestion.setAnswer(triviaFile1.nextLine()); lastKnownCategory = currentLine; } myList.add(currentQuestion); } } triviaFile1.close(); System.out.println(myList); } } 

有什么简单的东西,可能很明显我错过了吗?

是的 – 你还没有在TriviaQuestion覆盖toString ,所以你从Object得到了默认的实现 :

类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”以及对象的哈希码的无符号hex表示组成。 换句话说,此方法返回一个等于值的字符串:

 getClass().getName() + '@' + Integer.toHexString(hashCode()) 

只需将其添加到TriviaQuestion

 @Override public String toString() { return "Player: " + player + "; Category: " + category + "; Question: " + question + "; Answer: " + answer + "; Score: " + score; } 

(或者在方法中使用String.format来做同样的事情。)

您需要覆盖TriviaQuestion类中的toString方法, TriviaQuestion以您希望的方式打印对象。 toString方法的defualt实现打印对象的内存表示。

注意:如果您不知道如何编写toString方法,那么可以使用一些IDE(如eclipse)为您生成toString方法。 在日食中,

在编辑器中转到您的类,右键单击 – > source – > generate toString。