这是我的代码: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
我花了好几个小时试图解决这个问题。在我解决这个问题之前,我拒绝睡觉。有人请帮帮我。我将非常感激。
答案 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) {
}
}