我是一名学生,目前正在学习Java。我们必须为下一个学年制定一个编程项目,而几天前我开始从事我的项目,所以我没有足够的时间来完成它。我想为自己的游戏排行榜。当您死后,会弹出一个小屏幕,您可以在其中输入您的姓名,而您的姓名+分数将保存在文本文件中。现在,因为它是排行榜,所以我必须将其从最高分到最低分进行排序。我有点(也许)知道如何仅使用整数对它进行排序,但这是一个带有附加名称而不是int的字符串,因此您知道谁得分了。有谁知道该怎么做?
文本文件如下:
Max Mustermann - 10000
Max Muster - 40000
John Smith - 80000
Iam Uncreative - 20000
我当前读取文件的代码:(我正在使用JavaFX btw)
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" );
}
我还没有代码可保存到文件中,因为我对我的项目还不那么了解。只是想从文本文件中排序一些手动保存的字符串
我将不胜感激:) 抱歉我的语法不好
答案 0 :(得分:0)
我将创建一个类来容纳排行榜中的每个领导者,如下所示:
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");
}
答案 1 :(得分:0)
与所有中等复杂的CS问题一样,您需要将其分解为单独的问题:
类似以下的方法将起作用:
private static final Pattern PATTERN = Pattern.compile("\\d+$");
public static void main(String[] pArgs) throws IOException {
try (Stream<String> stream = Files.lines(Paths.get("file.txt"))) {
System.out.println(
stream.sorted(
Comparator.comparing(
pLine -> {
final Matcher matcher = PATTERN.matcher(pLine);
matcher.find();
return Integer.parseInt(matcher.group(0));
}
)
).collect(Collectors.joining("\n"))
);
}
}