这有点令人尴尬。我有一个我打算在JButton上使用的compareTo函数,所以当用户按下它时,他们可以看到哪个是排名最高的对象。我已经有了JButton的Listener类,但我不知道如何让Listener使用compareTo函数,因为它需要两个参数。
这是我的compareTo函数:
link
这是Listener类中的actionPerformed函数:
public int compareTo(Film film1, Film film2) {
if (film1.getFinalScore() < film2.getFinalScore()) return -1;
if (film1.getFinalScore() > film2.getFinalScore()) return 1;
return 0;
}
自动更正建议将参数设置为null以使其起作用,但它显然从未像自动修正那样简单。
那么,如何让Listener使用我的所有对象来执行compareTo函数,从最高到最低列出它们?
提前致谢!
答案 0 :(得分:2)
由于您需要将2部影片进行比较,您可以在Film Class
中执行此操作,方法是实施Comparable<Film>
,然后在课程中实施compareTo
方法。
之后,将您的电影放在任何collection
ArrayList
,然后只需拨打Collections.max(films)
即可获取列表中的最大电影对象。
这是一个用于演示的电影课程:
public class Film implements Comparable<Film>{
int finalScore ;
public Film(int finalScore){
this.finalScore = finalScore;
}
public int getFinalScore(){
return this.finalScore;
}
@Override
public int compareTo(Film film2) {
if (this.getFinalScore() < film2.getFinalScore()) return -1;
if (this.getFinalScore() > film2.getFinalScore()) return 1;
return 0;
}
}
这是主要的:
public static void main(String[] args) {
ArrayList<Film> films = new ArrayList<>();
films.add(new Film(100));
films.add(new Film(400));
films.add(new Film(200));
films.add(new Film(300));
System.out.println(Collections.max(films).getFinalScore());//prints 400
}
所以你的actionPerformed就像这样
@Override
public void actionPerformed(ActionEvent e) {
Film maxFilm = Collections.max(films);
//then use maxFilm object to do anything you need
}