0

我被困在我正在为学校制作的这个程序上。这是我的代码:

public static void experiencePointFileWriter() throws IOException{

    File writeFileResults = new File("User Highscore.txt");

    BufferedWriter bw;

    bw = new BufferedWriter(new FileWriter(writeFileResults, true));

    bw.append(userName + ": " + experiencePoints);
    bw.newLine();
    bw.flush();
    bw.close();

    FileReader fileReader = new FileReader(writeFileResults);

    char[] a = new char[50];
    fileReader.read(a); // reads the content to the array
    for (char c : a)
        System.out.print(c); // prints the characters one by one
    fileReader.close();

}

我面临的困境是如何通过 int experiencePoints 的数值对 writeFileResults 中的分数进行新分数排序?如果您想知道变量 userName 是由 textfield.getText 方法分配的,并且当您按下 36 个按钮之一时会发生一个事件,该按钮会启动具有 24 个可能结果之一的 math.Random 语句。他们都将不同的整数添加到体验点。

4

1 回答 1

0

好吧,我不想做你的作业,这似乎是介绍性的,所以我想给你一些提示。

首先,缺少一些东西:

  1. 我们没有你给我们的一些变量,所以没有与之关联的类型oldScores
  2. 没有对该方法调用的引用userNameexperiencePoints在此方法调用之外

如果您可以添加此信息,它将使此过程更容易。我可以推断出一些事情,但我可能是错的,或者更糟糕的是,你没有学到任何东西,因为我为你完成了你的任务。;)

编辑:

因此,根据额外信息,您的数据文件包含用户名和经验值的“数组”。因此,最好的方法(阅读:最好的设计,而不是最短的)是将这些加载到自定义对象中,然后编写一个比较器函数(阅读:实现抽象类Comparator)。

因此,在伪 Java 中,您将拥有:

  1. 声明你的数据类型:

    private static class UserScore {
        private final String name;
        private final double experience;
        // ... fill in the rest, it's just a data struct
    }
    
  2. 在您的阅读器中,当您读取值时,拆分每一行以获取值,并创建一个List<UserScore>包含从文件中读取的所有值的新对象(我会让您弄清楚这部分)
  3. 获得列表后,您可以使用Collections#sort将列表排序为正确的顺序,下面是一个示例:

    // assuming we have our list, userList
    Collections.sort(userList, new Comparator<UserScore>() { 
        public int compare(UserScore left, UserScore right) {
            return (int)(left.getExperience() - right.getExperience()); // check the docs to see why this makes sense for the compare function
        }
    }
    // userList is now sorted based on the experience points
    
  4. 按照您认为合适的方式重新编写文件。您现在有一个排序列表。

于 2013-10-27T21:55:26.830 回答