比较书面文件中的字符串

时间:2013-10-27 21:45:42

标签: java sorting methods filewriter

我坚持这个我正在上学的课程。这是我的代码:

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语句。它们都为experiencePoints添加了不同的整数。

1 个答案:

答案 0 :(得分:0)

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

首先,缺少一些东西:

  1. 我们没有给您提供一些变量,因此没有与oldScores
  2. 相关联的类型
  3. 此方法调用
  4. 之外没有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. 根据需要重新编写文件。您现在有一个排序列表。