好吧。我实际上是一个完全初学者的编码(采取了一些课程,但缓慢/密集的学习者),答案可能是可笑的简单。我有一个有名字的字符串数组,另一个有关联分数的字符串数组。
names[0] = blinky
scores[0] = 42 (blinky's score)
names[1] = inky
scores[1] = 37 (inky's score) 在for循环中,我调用数字(索引号?我的条件糟透了。唯一有意义的是代码本身)。不管怎么说,我想保护我。
我想列一个列表,把分数从最高到最低的名字排序。
我不知道使用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?")
}我该怎么做才能把名字排列好呢?越简单越好。我会非常感谢你的帮助。
编辑:我想感谢你们的帮助!:)
发布于 2019-05-06 02:18:12
要获得下面的结果,您可以尝试以下代码。
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=671)创建一个名为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)最后,您只需使用列表中可用的排序()方法来进行排序。
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);
}发布于 2019-05-06 02:14:45
您应该使用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=Pinky,50=Clyde,42=Blinky,37=Inky}
https://stackoverflow.com/questions/55997909
复制相似问题