gpt4 book ai didi

java - 如何在 Java 中对文件中的数据进行排序?

转载 作者:行者123 更新时间:2023-12-02 08:54:16 31 4
gpt4 key购买 nike

所以我的代码是一个游戏,它将玩家的姓名和分数注册在 .txt 文件中,所以我试图创建一个新类来对分数进行排序,以便在游戏开始时创建一个“最高分数”按钮并显示最高分及其旁边相应的名称。注册方法基本上是这样的:

Label text = new Label("How much players will play game with game?");
TextField input = new TextField();
Button submit = new Button("Submit");
submit.setOnAction(event -> {
tPlayer = Integer.parseInt(input.getText());
window.close();
});

所以文件看起来像这样:

,Player1,56
,player1,18
,player2,61
,noobMaster69,82

然后,还有另一个带有 read 方法的类:

try {
File myObj = new File("Jugador.txt");
Scanner myReader = new Scanner(myObj);
while (myReader.hasNextLine()) {
// Im stuck here
}
myReader.close();
} catch (FileNotFoundException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}

所以,就是这样,我不知道如何继续,任何帮助将不胜感激。

(抱歉,如果有任何格式错误或类似的问题,我在这里有点菜鸟:D)。

最佳答案

我要做的第一件事是创建一个类来表示Score。像这样的东西:

public class Score {

String player;
float score;

public Score(String player, float score) {
super();
this.player = player;
this.score = score;
}

}

请注意,这只是一个示例。一个好的 Score 类实现不应将 Player 表示为字符串。进行相应的更改。

之后,我们需要让Score类实现Comparable接口(interface)。这表明 Score 实例可以与其他对象进行比较;特别是在我们的例子中,是 Score 类型的其他对象。

public class Score implements Comparable<Score>{

String player;
float score;

public Score(String player, float score) {
super();
this.player = player;
this.score = score;
}

@Override
public int compareTo(Score anotherScore) {
if(this.score > anotherScore.score) {
return 1;
} else if (this.score < anotherScore.score) {
return -1;
}
return 0;
}

}

实现Comparable接口(interface)需要我们编写一个compareTo()方法。该方法应该从两个实例中决定哪个比另一个“更大”。您可以找到更详细的解释here 。总结如下:

Return a positive number if this instance is greater than the parameter.

Return a negative number if this instance is lesse than the parameter.

Return zero if both are equivalent.

现在回到您的代码。内部:

while (myReader.hasNextLine()) {
// Im stuck here
}

您应该创建一个 Score 实例并将其添加到集合中。

List<Score> scoreList = new ArrayList<>();
while (myReader.hasNextLine()) {
String line = myReader.nextLine();
String[] splitLine = line.split(",");
// line = Player1,56
// splitLine = ["Player1", "56"]
Score score = new Score(splitLine[0], Float.parseFloat(splitLine[1]));
scoreList.add(score);
}
Collections.sort(scoreList); // Sorts in ASCENDING order
Collections.sort(scoreList, Collections.reverseOrder()) // Sorts in DESCENDING order

Collections.sort() 将使用您在 Score 中创建的 compareTo() 方法按升序对列表进行排序。

关于java - 如何在 Java 中对文件中的数据进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60588026/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com