【问题标题】:Sorting Multiple ArrayLists Advice?排序多个 ArrayLists 建议?
【发布时间】:2013-09-27 05:37:20
【问题描述】:

嘿,伙计们。

背景: 我正在开发一个要求 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);
        }


}

【问题讨论】:

  • 你有什么问题?
  • Collections.swap() 是一个方便的实用程序!但是ab 是什么?它们没有在任何地方定义,您的编译器消息应该同样大喊大叫。

标签: java


【解决方案1】:

使用字段创建一个对象:namescoreimplements Comparable
然后只有一个ArrayList使用Collections.sort(list);

【讨论】:

  • 为什么做基本作业的人都应该使用 Comparable?
  • @clwhisk 因为它更简单更好的方法。
  • 自己点单更简单。一旦你了解了如何比较元素,无论你把代码放在哪里,你都可以用它来完成排序。
  • @clwhisk 使用已经存在的东西更简单,而不是浪费时间。
  • 通常使用预先存在的排序方法很好,但恰恰相反,初学者作业被禁止。
【解决方案2】:

您可以将 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&lt;Result&gt;) 根据最高分对它们进行排序。

【讨论】:

  • 你看到亚历克斯的回答了吗,为什么要添加重复?
  • @SergiiZagriichuk 至少它从中删除了一层抽象。
【解决方案3】:

好的,你想打印类似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 个方法初始化和显示, 按范围排序将按需执行

【讨论】:

    猜你喜欢
    • 2015-09-13
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    相关资源
    最近更新 更多