- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含测验和 Activity 的应用程序,我希望获得得分最高的 5 名玩家。我有 2 个 ArrayList,其中一个存储分数,另一个存储玩家的姓名。我成功地列出了分数列表,但我不知道如何在同行分数旁边添加正确的名字。
我所拥有的图像:/image/7PxmR.png
以及我正在寻找的图像:/image/HNEsU.png
我尝试过使用 Map,但我不知道不能存储 2 个相同的键,所以这是不可能的,但可能有一种方法可以拥有某种带有索引的数组列表,但可以有 2 个不同的信息,我不知道。
我的 2 个 ArrayList:
public static ArrayList<Integer> scoresList = new ArrayList<>();
public static ArrayList<String> namesList = new ArrayList<>();
我获得 5 个最佳成绩的方法:
public class HistoryActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_history);
TextView first = (TextView) findViewById(R.id.history_activity_first);
TextView second = (TextView) findViewById(R.id.history_activity_second);
TextView third = (TextView) findViewById(R.id.history_activity_third);
TextView fourth = (TextView) findViewById(R.id.history_activity_fourth);
TextView fifth = (TextView) findViewById(R.id.history_activity_fifth);
Collections.sort(scoresList, Collections.reverseOrder());
first.setText("Best score is : " + scoresList.get(0));
if (scoresList.size() >= 2) {
second.setText("2nd best score is : " + scoresList.get(1));
}
if (scoresList.size() >= 3) {
third.setText("3rd best score is : " + scoresList.get(2));
}
if (scoresList.size() >= 4) {
fourth.setText("4th best score is : " + scoresList.get(3));
}
if (scoresList.size() >= 5) {
fifth.setText("5th best score is : " + scoresList.get(4));
}
}
}
谢谢
最佳答案
创建一个类来表示分数/名称条目:
public class ScoreEntry implements Comparable<ScoreEntry> {
public final String name;
public final int score;
public ScoreEntry (String name, int score){
this.name = name;
this.score = score;
}
public int compareTo (ScoreEntry other){
return Integer.signum(score - other.score);
}
}
然后你可以将它们放入ArrayList中。通过像这样实现 Comparable,您可以允许列表按分数排序。
您可能还想在此类中包含一个日期,以便较早日期取得的分数排名高于具有相同分数的其他条目。您可以使用 System.nanoTime()
来获取得分时的 long 时间。
public class ScoreEntry implements Comparable<ScoreEntry> {
public final String name;
public final int score;
public final long time;
public ScoreEntry (String name, int score, long time){
this.name = name;
this.score = score;
this.time = time;
}
public int compareTo (ScoreEntry other){
if (score == other.score)
return Long.signum(other.time - time);
return Integer.signum(score - other.score);
}
}
编辑:如果您想通过其他方式排序,您需要一个自定义比较器。我改编自this answer ,其中考虑了大小写。
Comparator<ScoreEntry> nameComparator = new Comparator<>(){
public int compare(ScoreEntry first, ScoreEntry second) {
int res = String.CASE_INSENSITIVE_ORDER.compare(first.name, second.name);
if (res == 0)
res = first.name.compareTo(second.name);
return res;
}
}
然后您将其传递给排序方法:
Collections.sort(scoresList, nameComparator);
关于java - 如何在最佳成绩历史记录 Activity 中添加取得最佳成绩的玩家的姓名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58206617/
我已经安装了 Iubenda Consent Solution JS SDK,它似乎可以正常工作。一旦用户通过滚动或关闭通知表示同意,横幅就会消失,并且据推测,同意将存储在 Iubenda 系统中。
在我的 View Controller 中,我以编程方式在我的 UIView 中创建了 N 个按钮。每个按钮都需要做一些不同的事情,所以我制作了一个自定义处理程序类,我创建了 N 个实例,每个实例都使
我是一名优秀的程序员,十分优秀!