gpt4 book ai didi

java - 使用另一个元素创建新的 ArrayList

转载 作者:行者123 更新时间:2023-11-29 08:39:24 25 4
gpt4 key购买 nike

我现在正在编写我的第一个 Java 游戏的代码,但我遇到了 ArrayList 的问题。我有一个,包含昵称和分数等元素,具体来说,我是从文本文件(下面的代码)创建的:

static ArrayList<String> results = new ArrayList<String>();
BufferedReader br = new BufferedReader(new FileReader(ranking));
String line = br.readLine();
results.add(line);

while(line != null) {
line = br.readLine();
results.add(line);
}

br.close();

所以文件看起来像这样:

nick1
score1
nick2
score2
...

我想对排名前 10 位的最佳结果进行排名,我的想法是使类具有 nick 和 score 字段,并以某种方式将这些字段分配给 ArrayList 中的适当字段。也许我可以这样做:(?)

for(int i = 0;i<results.size();i=i+2){
nick = results.get(i);
}

for(int i = 1;i<results.size();i=i+2){
score = results.get(i);
}

然后我将创建一个新的 ArrayList,它属于那个新类的类型。但我的问题是,我不完全知道如何将“旧”ArrayList 的值与 future 类型的新 ArrayList 的参数连接起来。新的应该是这样的:

static ArrayList<Ranking> resultsAfterModification = new ArrayList<Ranking>();
Ranking rank = new Ranking(nick, score);

然后我可以很容易地比较玩家的分数并做出可靠的排名。

最佳答案

您可以创建一个类 Player,其中包含每个玩家的姓名和分数。 Player 类应该实现 Comparable接口(interface),这是 Java 确定集合中元素逻辑顺序的方法:

public class Player implements Comparable<Player>
{
private String _name;
private double _score;

public Player(String name, double score)
{
this._name = name;
this._score = score;
}

public String getName()
{
return this._name;
}

public double getScore()
{
return this._score;
}

// Since you probably want to sort the players in
// descending order, I'm comparing otherScore to this._score.
@Override
public int compareTo(Player otherScore)
{
return Double.compare(otherScore._score, this._score);
}

@Override
public String toString()
{
return "Name: " + this._name + ", Score: " + Double.toString(this._score);
}
}

一旦您创建了Player 类,您就可以一次读取名称和分数并使用Collections。用于对 Player 列表进行排序的实用程序类。最后但并非最不重要的一点是,您可以使用 subList 方法获取前十名:(这假设文件将为每个名称提供一个分数,并且文件将采用您在上面指定的格式)

public static void main(String[] args)
{
List<Player> results = new ArrayList<Player>();
BufferedReader br;
try
{
br = new BufferedReader(new FileReader("myFile.txt"));
String line = br.readLine();
while(line != null)
{
String name = line;
double score = Double.parseDouble(br.readLine());
results.add(new Player(name, score));
line = br.readLine();
}
br.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}

// Sort using the java.util.Collections utility class
// Sorting will modify your original list so make a copy
// if you need to keep it as is.
Collections.sort(results);
// Top 10
List<Player> top10 = results.subList(0, 10);
}

关于java - 使用另一个元素创建新的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41477112/

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