我被要求做一个测验,在测验结束时,我想保留的是两个独立的数组名称[]和得分[]。我被要求使用输入和输出将分数保存在文件中。我已设法完成所有操作并成功输出结果并将其保存到文件中(例如highscores.txt)
结果保存如下:
4
name10
name5
name4
name2
第一行表示文件中有多少分数,因为每个参加测验的人都会保存他们的分数。 我正在努力做的是将得分按从最高到最低的顺序排序。
我已经尝试在将分数保存到文件中之前对分数进行排序,但文件中的旧分数将不再排序。例如:
8
newname10
newname9
newname8
newname7
name10
name5
name4
name2
我只是一个初学者所以很容易......
答案 0 :(得分:0)
你应该做的是创建实现class Person
的{{1}},如果你有点懒,而且数据量也不大Comparable<Person>
。
然后将所有内容放在Serializable
中并编写序列化TreeSet的方法并对其进行反序列化。
像这样:
TreeSet<Person>
答案 1 :(得分:0)
好吧,因为您没有使用任何格式来轻松区分用户名和分数(例如:[用户名]:[分数])您将这两个信息彼此分开的问题之后。
无论如何 - 您需要加载数据并重新排序,尝试将用户名与分数分开。读取我的行的文件行,并使用regexp从分数中分割名称(希望用户名仅包含字母):Pattern.compile("(\w+)(\d+)")
。然后,您可以使用Matcher
获取组1(名称)和组2(分数)。然后你可以比较得分并重新排序列表
答案 2 :(得分:0)
这个小程序应该完成工作。
请记住,这只是对文本文件进行排序。如果您需要根据您的问题进行进一步处理,请进行修改。
public class LineReader {
public static void main(String[] args) {
String file = args[0];
List<String> _list = new ArrayList<String>();
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
for (String line; (line = br.readLine()) != null;) {
_list.add(line);
}
} catch (Exception ex) {
}
java.util.Collections.sort(_list, String.CASE_INSENSITIVE_ORDER);
try(FileWriter writer = new FileWriter(file)) {
for (String str : _list) {
writer.write(str + "\n");
}
writer.close();
} catch (IOException ex) {
}
}
}
答案 3 :(得分:0)
如果你已经能够在将结果写入文件之前对结果进行排序,为什么不在更新之前读取所有文件呢?然后,您可以将存储在数据结构中的旧数据与新数据放在一起,然后将它们组合在一起。然后你应该用你已经拥有的数据覆盖旧文件。
如果您的文件有大量记录,这种方式可能会很昂贵。
最好的方法是使用保持物品整齐的集合。看看PriorityQueue类。然后将其存储到文件中,并在添加新元素之前加载它。 您可以使用ObjectOutputStream将PriorityQueue写入文件,并使用ObjectInputStream将其读回。