Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为游戏保存高分时出错?_Java_File Io_Java Io - Fatal编程技术网

Java 为游戏保存高分时出错?

Java 为游戏保存高分时出错?,java,file-io,java-io,Java,File Io,Java Io,因此,我正在制作一个游戏,我认为保存用户的高分(只有一个人)将是一个很酷的功能,这样可以将它与玩家在刚刚玩过的游戏结束时得到的分数进行比较。我认为最简单的方法是将高分写入文本文档(我实际上将其设置为.dat,因此用户更难编辑),然后在需要时检索它。所以,我是OOP的忠实粉丝,我创建了一个名为“HighScoreSave”的类来管理它,然后我可以使用这个对象来调用save()和load()。不幸的是,在开始之前,我对BufferedWriter、Reader、PrintWriter或任何其他类型的

因此,我正在制作一个游戏,我认为保存用户的高分(只有一个人)将是一个很酷的功能,这样可以将它与玩家在刚刚玩过的游戏结束时得到的分数进行比较。我认为最简单的方法是将高分写入文本文档(我实际上将其设置为.dat,因此用户更难编辑),然后在需要时检索它。所以,我是OOP的忠实粉丝,我创建了一个名为“HighScoreSave”的类来管理它,然后我可以使用这个对象来调用save()和load()。不幸的是,在开始之前,我对BufferedWriter、Reader、PrintWriter或任何其他类型的Java文件编辑器一无所知。所以,不用再做了,下面是我写的。我知道,这里可能到处都是非传统的做法,但这就是我来这里的原因,对吗P

public class HighscoreSave {

String filename;
File file;
BufferedReader in;
FileWriter writer;
PrintWriter out;
Game game;
int currentScore = 0;
String currentScoreString = "";``
String highScore = "";

public HighscoreSave(Game game) {
    filename = "data/highscore.dat";
    file = new File(filename);
    this.game = game;
}

public void save() throws IOException, NumberFormatException {
    in = new BufferedReader(new FileReader(filename));
    currentScore = game.getScore();
    StringBuilder sb = new StringBuilder();
    sb.append("");
    sb.append(currentScore);
    currentScoreString = sb.toString();
    highScore = in.readLine();
    int tempHighScore = Integer.parseInt(highScore.trim());

    if(tempHighScore < currentScore){
        file.delete();
        file.createNewFile();
        writer = new FileWriter(filename, true);
        out = new PrintWriter(writer);
        out.write(highScore);
    }
    out.close();
    in.close();
}

public int load() throws IOException {
    in = new BufferedReader(new FileReader(filename));
    highScore = in.readLine();
    int highScoreInt = Integer.parseInt(highScore);
    in.close();
    return highScoreInt;
}
公共类HighscoreSave{
字符串文件名;
文件;
缓冲读取器;
文件编写器;
打印输出;
游戏;
int currentScore=0;
字符串currentScoreString=“”``
字符串高分=”;
公开高分保存(游戏){
filename=“data/highscore.dat”;
文件=新文件(文件名);
这个游戏=游戏;
}
public void save()引发IOException、NumberFormatException{
in=新的BufferedReader(新的文件读取器(文件名));
currentScore=game.getScore();
StringBuilder sb=新的StringBuilder();
某人加上(“”);
某人追加(当前分数);
currentScoreString=sb.toString();
highScore=in.readLine();
int tempHighScore=Integer.parseInt(highScore.trim());
如果(tempHighScore
}

基本上,我要做的是使用一个方法(save())来检查当前分数是否更好,如果更好,则创建一个新文件,其中包含新的高分,并最终删除旧文件。然后,我使用load()返回高分,以便在游戏结束时可以在我的游戏类中使用它。但是它拒绝更改文件,现在它只是一遍又一遍地写零,零,零,结果得到高分零


我错过什么了吗?我如何解决这个错误,或者有没有更好的方法来解决这个问题?

“我实际上把它改成了.dat,这样用户就更难编辑了”…更改文件名如何让编辑变得更难?还有,
sb.append(“”)的意义是什么?读取数据后立即关闭输入文件,当然在尝试覆盖之前也要关闭输入文件。你在代码中做了一些古怪的事情,创建文件并忽略它们。我强烈建议您毫不拖延地完成文件输入和输出教程。别猜这个笑话。我不知道,这正是我读到的。:/至于某人附加(“”)的意思,我也不确定。再一次,我在网上读到了一些东西。最初我把它注释掉了,因为它对我来说似乎很愚蠢,但当我试图将它添加到我的问题时,它开始告诉我我的代码“格式不正确”…创建一个与要替换的文件同名的新文件,并保存它。就这么简单。我想你可能把事情弄得太难了。这就是你需要的。