好的。我实际上是编码的初学者(参加了一些课程,但学习者缓慢/密集),答案可能非常简单。我有一个具有名称的字符串数组,另一个具有相关的分数。
names[0] = blinky
scores[0] = 42 (blinky's score)
names[1] = inky
scores[1] = 37 (inky's score)
在for循环中,我调用数字(索引号?我对术语感到恐惧。似乎唯一有意义的事情就是代码本身)。无论如何,我希望能够保留i。
我想创建一个列表,按名称从高到低的顺序排列分数。
我不知道使用util.Arrays或将自动排序的任何方法是否会有所帮助。我相信我必须手动对它们进行排序才能保持名称和数字对齐
//Example
String[] names = {"Blinky","Inky","Pinky","Clyde"};
int[] scores = {42,37,67,50};
for (int = 0; i < scores.length; i++){
System.out.println("what do?")
}
我将如何制作一个将名称排序的列表?越简单越好。 我非常感谢您的帮助。
编辑:非常感谢大家的帮助! :)
答案 0 :(得分:0)
要获得以下结果,您可以尝试以下代码。
Unsorted
---------
Blinky, score=42
Inky, score=37
Pinky, score=67
Clyde, score=50
sort by score ascending
Inky, score=37
Blinky, score=42
Clyde, score=50
Pinky, score=67
sort by Name ascending
Blinky, score=42
Clyde, score=50
Inky, score=37
Pinky, score=67
1)创建一个名为NameScoreEntity的新类,将两个变量存储在一起(这样,当您进行排序时,名称和分数将同时完成)
public class NameScoreEntity {
String name;
int score;
public NameScoreEntity(String name, int score) {
this.name = name;
this.score = score;
}
@Override
public String toString() {
return name + ", score=" + score;
}
}
2)然后创建新类的arrayList,将两个数组复制到其中。
String[] names = {"Blinky","Inky","Pinky","Clyde"};
int[] scores = {42,37,67,50};
List<NameScoreEntity> data = new ArrayList<>(); // your data is now stored here
for (int i= 0; i < scores.length; i++){
data.add(new NameScoreEntity(names[i], scores[i]));
}
//print unsorted
System.out.println("Unsorted\n---------");
for (NameScoreEntity e : data) {
System.out.println(e);
}
3)最后,您只需使用列表中可用的sort()方法进行排序即可。
System.out.println("sort by score ascending");
data.sort(new Comparator<NameScoreEntity>() {
@Override
public int compare(NameScoreEntity o1, NameScoreEntity o2) {
return Integer.compare(o1.score, o2.score); //for descending just swap o1 & o2
}
});
for (NameScoreEntity e : data) {
System.out.println(e);
}
System.out.println("sort by Name ascending");
data.sort(new Comparator<NameScoreEntity>() {
@Override
public int compare(NameScoreEntity o1, NameScoreEntity o2) {
return o1.name.compareTo(o2.name) ;//for descending just swap o1 & o2
}
});
for (NameScoreEntity e : data) {
System.out.println(e);
}
答案 1 :(得分:-1)
您应该使用TreeMap
,它将始终保持得分之间的顺序并与相应的String
相匹配。
// new TreeMap that sorts from highest to lowest
Map<Integer, String> map = new TreeMap<>(Collections.reverseOrder());
然后使用已存在的循环将所有值put
放入Map
:
for(int i = 0; i < scores.length; i++)
map.put(scores[i], names[i]);
最后您可以只打印Map
:
System.out.println(map);
结果:
{67 =粉红,50 =克莱德,42 =闪烁,37 =漆黑}