背景: 我正在做一个高分项目的家庭作业,要求5个名字和5个分数。在输入具有相应分数的名称之后,程序按最高分数对两个ArrayLists进行排序。最后,它按排序顺序显示名称及其分数。
问题: 我有一段时间试图对ArrayLists进行排序,你对ArrayLists的排序有什么建议吗?
代码:
import java.util.*;
public class Assignment6
{
public static void main(String args[])
{
ArrayList<String> names = new ArrayList();
ArrayList<Integer> scores = new ArrayList();
initializeArrays(names, scores);
//sortArrays(names, scores);
displayArrays(names, scores);
}
public static void initializeArrays(ArrayList names, ArrayList scores)
{
Scanner in = new Scanner(System.in);
for(int i=0; i<5; i++)
{
System.out.println("Enter the name for score # " + (i+1) + ": ");
names.add(in.next());
System.out.println("Enter the score for score # " + (i+1) + ": ");
scores.add(in.next());
}
}
public static void sortArrays(ArrayList names, ArrayList scores)
{
for(int i=0; i<5; i++)
{
if(scores[i] < scores[i+1])
{
Collections.swap(scores,a, b);
Collections.swap(names,a, b);
}
}
}
public static void displayArrays(ArrayList names, ArrayList scores)
{
System.out.println("Top Scorers: ");
System.out.println(names);
System.out.println(scores);
}
}
答案 0 :(得分:4)
创建一个包含字段的对象:name
和score
implements Comparable
然后仅一个ArrayList
使用Collections.sort(list);
答案 1 :(得分:1)
您可以将得分和名称包装到一个对象中,并将其存储在列表中。
class Result implements Comparable<Result>{
private String name;
private int score;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public int compareTo(Result other) {
return this.score - other.score;
}
}
现在,您可以使用Collections.sort(List<Result>)
根据最高分数对其进行排序。
答案 2 :(得分:0)
好吧,你想打印类似A-{Bob, Alex, ...},
的东西,其中Bob是一个名字而A是范围,你可以使用Alex描述的一个对象来做,但如果它的家庭工作,我认为你的老师想要看一些计算机科学数据结构,在这种情况下Associative_array会更好。您可以在您身边实现它或使用Java实现。 Java为我们提供了Map [T,V]和实现,对于你的例子是TreeMap,其中T - 是范围,V - 是Name的列表,因为很多人可以拥有相同的范围。
所以,结果结构将是那样的
Map<String, List<String>> sortedScopes = new TreeMap<>();
并使用:
List<String> names = sortedScopes.get(scope);
if(names == null){
names = new ArrayList<>();
sortedScopes.put(scope, names);
}
names.add(name)
在该解决方案中,您只需要初始化和显示2个方法, 按范围排序将按需执行