【问题标题】:Insertion sorting插入排序
【发布时间】:2014-03-23 01:31:51
【问题描述】:

我正在尝试按标题、工作室、年份对数组进行排序。

movies[0] = new Movie2("The Muppets Take Manhattan","Columbia Tristar", 2001);

我在如何为排序方法创建构造函数时遇到了麻烦。我不知道如何将所有三个元素分开以单独排序。

【问题讨论】:

  • 那么,您在线搜索“sort array java”得到了什么结果?
  • 很抱歉,您不会为排序方法构建构造函数,而是为类对象构建构造函数。
  • @Welshboy 我知道,我使用了像这样的构造函数这个词 public static void sortYear(Movie2[] movies, int n)
  • @Galaga 在 Java 中称为method
  • 如果您愿意阅读它,请告诉我您对我的解决方案的看法。

标签: java arrays oop sorting object


【解决方案1】:

你可能已经让它工作了,但我想出了一个答案,所以我还是会发布它。我还没有在Movie 类中实现Comparator interface;相反,我只使用Arrays.sort 和自定义Comparator 来按电影的某些属性对其进行排序。

这里是我创建的Movie class,仅供参考。这是我用来排序示例的代码:

Movie a = new Movie("The Muppets Take Manhattan", "Columbia Tristar", 2001);
Movie b = new Movie("Fight Club", "Regency Enterprises", 1999);
Movie c = new Movie("Toy Story", "Walt Disney Pictures", 1995);

Movie[] movies = {a, b, c};

// compares the TITLES in ASCENDING order
Arrays.sort(movies, new Comparator<Movie>() {
    public int compare(Movie m1, Movie m2) {
        return m1.getTitle().compareTo(m2.getTitle());
    }
});

// print out the sorted movie array
for (Movie m : movies) {
    System.out.println(m + "\n---");
}

如果您想按降序排列,您可以简单地颠倒您在比较器中比较值的顺序。例如,您可以更改:

return m1.getTitle().compareTo(m2.getTitle());

到这里:

return m2.getTitle().compareTo(m1.getTitle());

如果您想比较Movie 的不同属性,只需将getTitle() 更改为其他内容,例如getYear()getStudio()。示例:

return m1.getYear() - m2.getYear(); // ascending by year

因为年份在int 中,所以不能使用String compareTo 方法,只需要返回差值即可。


要根据输入对电影进行排序,请查看this code。我不想马上吓到你。

【讨论】:

    【解决方案2】:

    这最好通过实践而不是提供答案来学习。查看Object Ordering上的 Java 教程部分

    提示:您需要实现Comparable 接口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多