0

我正在获取一个文本文件并填充一个数组列表。为了测试文件,我在继续之前将其打印出来。我只能看到内存地址,而不是文件中的实际信息。是否有一些简单且可能很明显的东西我错过了?

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<TriviaQuestion> myList = new ArrayList<TriviaQuestion>();
    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);

}

}
4

2 回答 2

3

是否有一些简单且可能很明显的东西我错过了?

是的 - 您没有被覆盖toStringTriviaQuestion所以您从以下位置获取默认实现Object

Object 类的 toString 方法返回一个字符串,该字符串由对象作为实例的类的名称、at 符号字符“@”和对象的哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:

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

只需将其添加到TriviaQuestion

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

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

于 2013-09-21T05:13:01.623 回答
2

您需要覆盖类中的toString方法以TriviaQuestion按照您想要的方式打印对象。toString 方法的默认实现打印对象的内存表示。

注意:如果您不知道如何编写 toString 方法,那么请使用 Eclipse 等 IDE 为您生成 toString 方法。在日食中,

在编辑器中转到您的班级,右键单击-> 源-> 生成 toString。

于 2013-09-21T05:13:20.317 回答