gpt4 book ai didi

java - 如何修复我用compareTo()比较字符串的代码

转载 作者:行者123 更新时间:2023-11-30 05:31:29 24 4
gpt4 key购买 nike

我编写了这段代码来按名称(字符串)对电影进行排序,但它没有对其进行排序。

另外,我应该如何比较两个 movies基于年份属性?

//public int compareTo(Movies m) { return this.year-m.year; } 

我很困惑,当我们在排序方法中传递了整个列表时,正在比较哪个 m 对象。

import java.util.*;

class Movies implements Comparable<Movies> {
private double rating;
private String name;
private int year;

// Used to sort movies by year
public int compareTo(Movies m) {
return this.getName().compareTo(m.getName());

}

// Constructor
public Movies(String nm, double rt, int yr) {
this.name = nm;
this.rating = rt;
this.year = yr;
}

public void thisee() {
System.out.println(this.year);
}

// Getter methods for accessing private data
public double getRating() {
return rating;
}

public String getName() {
return name;
}

public int getYear() {
return year;
}

public static void main(String[] args) {
ArrayList<Movie> list = new ArrayList<Movie>();
list.add(new Movie("Force Awakens", 8.3, 2015));
list.add(new Movie("Star Wars", 8.7, 1977));
list.add(new Movie("Empire Strikes Back", 8.8, 1980));
list.add(new Movie("Return of the Jedi", 8.4, 1983));

Collections.sort(list);

System.out.println("Movies after sorting : ");
for (Movie movie : list) {
System.out.println(movie.getName() + " " + movie.getRating() + " " + movie.getYear());
}
}
}

最佳答案

如果您希望能够有时按名称排序,有时按年份排序,而不必修改 Movie 类来实现这一点,那么您可以将顺序嵌入到单独的“比较器”对象中,而不是嵌入到电影中正在比较。

public class MoviesByName implements Comparator<Movie> {
public int compare(Movie m1, Movie m2) {
return m1.getName().compareTo(m2.getName());
}
}

public class MoviesByYear implements Comparator<Movie> {
public int compare(Movie m1, Movie m2) {
return m1.getYear() - m2.getYear();
}
}

然后

Collections.sort(list, new MoviesByName());

Collections.sort(list, new MoviesByYear());

这种方法表明,不存在适用于“电影”的单一顺序 - 您在进行排序时定义所需的顺序(通过比较器)。

MoviesByRating 当然可以用同样的方式完成。

附注我注意到我错误地认为该类被称为“电影”而不是“电影”。在我看来,“电影”更好,因为单个实例代表一部电影。 (比较:它是 Integer 而不是 Integers)。

关于java - 如何修复我用compareTo()比较字符串的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57444429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com