java - JavaFX 排序文本文件输出
问题描述
我是一名学生,目前正在学习 Java。我们必须为下一学年做一个编程项目,几天前我开始做我的项目,所以我有足够的时间来完成它。我想为我的游戏制作排行榜。当你死后会弹出一个小屏幕,你可以在其中输入你的名字,然后你的名字+你的分数将保存在一个文本文件中。现在,因为它是一个排行榜,我必须将它从最高分到最低分进行排序。我有点(也许)知道如何只用整数对其进行排序,但这是一个带有额外名称而不是 int 的字符串,所以你知道谁得分了。有谁知道如何做到这一点?
文本文件如下所示:
Max Mustermann - 10000
Max Muster - 40000
John Smith - 80000
Iam Uncreative - 20000
我当前读取文件的代码:(我正在使用 JavaFX 顺便说一句)
try {
BufferedReader br = new BufferedReader( new FileReader( file ) );
String x;
while ( ( x = br.readLine() ) != null ) {
String s = tLB.getText();
tLB.setText( s + "\n" + x );
}
} catch(Exception E) {
System.out.println( "cant read leaderboard" );
}
我还没有代码可以保存到文件中,因为我的项目还没有那么远。只想从文本文件中对一些手动保存的字符串进行排序
我将不胜感激任何形式的帮助 :) 对不起我的语法错误
解决方案
我会创建一个类来保存排行榜中的每个领导者,如下所示:
static class LeaderBoardEntry implements Comparable {
String name;
int score;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public int compareTo(Object o) {
return ((LeaderBoardEntry) o).score - this.score;
}
}
在这里实现 Comparable 接口允许我们比较领导者以根据他们的分数获得自然排序。
接下来,我将修改您的代码,如下所示,以便显示已排序的排行榜,
try {
BufferedReader br = new BufferedReader(new FileReader(file));
List<LeaderBoardEntry> leaders = new ArrayList<>();
String x;
while ((x = br.readLine()) != null) {
LeaderBoardEntry leaderBoardEntry = new LeaderBoardEntry();
String[] splits = x.split(" - ");
leaderBoardEntry.setName(splits[0]);
leaderBoardEntry.setScore(Integer.parseInt(splits[1]));
leaders.add(leaderBoardEntry);
}
Collections.sort(leaders);
StringBuilder leaderBoardStr = new StringBuilder();
for (LeaderBoardEntry leaderBoardEntry : leaders) {
leaderBoardStr.append(leaderBoardEntry.getName())
.append(" - ")
.append(leaderBoardEntry.getScore())
.append("\n");
}
String s = tLB.getText();
tLB.setText( s + "\n" + leaderBoardStr.toString());
} catch (Exception E) {
System.out.println("cant read leaderboard");
}
推荐阅读
- html - 如何仅使用css根据图像宽度为父级设置动态宽度
- c++ - 为什么互斥引用上的 lock_guard 会产生 C26110
- python - 是否有python函数可以在部分已知的字符串中查找未知值?
- json - 从活动响应 Azure 数据工厂设置变量
- python - 将未定义的列表合并为一个列表
- apache-spark - Oracle“更改会话集版本..”似乎无法使用选项 sessionInitStatement
- c# - MeshGeometry3D 上的默认纹理坐标
- haskell - 在 Haskell 中的 String 中的任意位置将双空格转换为单空格
- javascript - 如何将输入文本传递给我的 React 应用程序中的过滤器组件
- php - 学说:检查鉴别器实体是否存在关系