1

嘿,伙计们和姑娘们。

背景:我正在开发一个要求 5 个名字和 5 个分数的家庭作业高分项目。输入具有相应分数的名称后,程序按最高分数对两个 ArrayList 进行排序。最后,它按排序顺序显示名称及其分数。

问题:我正在尝试对 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);
        }


}
4

3 回答 3

4

创建一个带有字段的对象:namescore带有implements Comparable.
然后只有一种ArrayList用途Collections.sort(list);

于 2013-09-27T05:42:59.987 回答
1

您可以将 score 和 name 包装到一个对象中并将其存储在列表中。

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>)根据最高分对它们进行排序。

于 2013-09-27T05:58:15.363 回答
0

好的,您是否想打印A-{Bob, Alex, ...},Bob 是名称且 A 是范围的内容,您可以使用 Alex 描述的一个对象来完成,但如果它的家庭作业我认为您的老师希望看到一些通勤科学数据结构,在那种情况下,Associative_array会更好。您可以在您身边实现它或使用 java 实现。Java 为我们提供 Map [T, V] 和实现,对于您的情况是 TreeMap,其中 T - 是范围,V - 是名称列表,因为很多人可以拥有相同的范围。所以,结果结构将是这样的

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 个方法初始化和显示,按范围排序将按需执行

于 2013-09-27T05:51:02.997 回答