如何更新现有文本文件的编号?

时间:2017-04-14 08:46:32

标签: java

这是我的代码:https://pastebin.com/1Cmg5Rt8

程序会询问用户的姓名。

然后它会生成随机数学问题,并计算正确答案和错误答案。

对于正确答案,用户奖励0.05美元,对于错误答案,罚款0.03美元。

以上所有事情都已完成。

我从这里开始被困:

使用文件名创建文件。

他们得到的答案数量正确/不正确会记录到文本文件中。

如果名称下的文件已存在,我必须将其结果与文件中的结果相结合。

现有文本文件的示例:

Correct answers: 1 

Incorrect answers: 0

Earnings: $0.05

如果用户再次运行该程序并获得1个正确答案,则必须按如下方式更新:

Correct answers: 2 

Incorrect answers: 0

Earnings: $0.10

目前,它正在被覆盖,而不是更新。 如果我在开头选择show stats,这就是结果(它使用初始值):

Correct answers:0 

Incorrect answers: 0

Earnings: $0.00

我花了好几个小时试图解决这个问题。在我解决这个问题之前,我拒绝睡觉。有人请帮帮我。我将非常感激。

1 个答案:

答案 0 :(得分:0)

您需要在检索统计数据时/之前读取名称,即您的主要方法应如下所示:

public static void main(String[] args) {
    validateCreditsResponse();
    name();
    retrieveStats();
    menu();
    saveStats();
}

此外,在这种方法中,您还需要输出类似于“其他”的打印输出。分支:

    if (money > 0) {
        outputfile.printf("Earnings: $%.2f", money);
        // Add outputfile.println();
    }

最后,在此方法中,您需要在数据中读取

//Creates new text file for the user unless one already exists.
public static void retrieveStats() {


    try {

        writer = new FileWriter(userName + "Stats.txt", true);
        outputfile = new PrintWriter (writer);

    } catch (IOException e) {
    }
}

您将使用FileReader而不是FileWriter开始执行此操作。

例如在Java 8中,像这样:

//Reads existing text file for the user.
public static void retrieveStats() {
    try (BufferedReader br = new BufferedReader(new FileReader(userName + "Stats.txt"))) {
        String line;
        while ((line = br.readLine()) != null) {

            Matcher correctMatcher = Pattern.compile("Correct Answers:(.*)").matcher(line);
            if (correctMatcher.matches()) {
                correct = Integer.valueOf(correctMatcher.group(1));
            }

            // TODO complete other matchers

        }
    } catch (IOException e) {
    }
}