我有一个对象类
public class Film implements Comparable<Film>
我正在使用Eclipse,想知道为什么Film
用红色下划线标出错误:
The type Film must implement the inherited abstract method Comparable<Film>.compareTo<Film>
现在我的主要问题是:
如何获得用户提交的最大/最小影片长度和标题?
我的对象类Film具有用于电影标题和电影长度的getter和setter方法以及toString方法。下面这个文章(#3)我创建了我的对象类的两个方法:
public int max(Film maxLength){
int compareLength = ((Film) maxLength).getLength();
return this.length - compareLength;
}
public int min(Film minLength){
int compareLength = ((Film) minLength).getLength();
return compareLength - this.length;
}
我可以使用这些来查找和打印用户提交的胶卷长度的最大值/最小值吗?
如果是这样,怎么办?
如果没有,执行此操作的正确方法是什么?
测试类如下:
import java.util.Scanner;
public class test {
public static void main (String[] args){
Film[] f = new Film[3];
Scanner input = new Scanner(System.in);
for (int i=0;i<3;i++){
f[i] = new Film();
System.out.println("Enter Film Length:");
f[i].setLength(input.nextInt());
input.nextLine();
System.out.println("Enter Title:");
f[i].setTitle(input.nextLine());
}
input.close();
for (int i = 0; i < 3; i++) {
System.out.println(f[i].toString());
}
}
}
在Film
类实现Comparable<Film>
。这意味着您必须实现一个compareTo()
在类Film
中调用的方法,该方法将提供此类对象的排序。
@Override
public int compareTo(Film that) {
// Order by film length
return Integer.compare(this.length, that.length);
}
如果只需要按胶片长度对对象进行排序,则可以使用Arrays.sort()
:
Film[] films = new Film[3];
// put the objects into the array
Arrays.sort(films);
然后films[0]
将包含长度最短的电影,而最后一个元素将是长度最长的电影。
如果需要按其他字段(例如电影标题)进行比较,则可以创建一个自定义比较器:
class FilmTitleComparator implements Comparator<Film> {
public int compare(Film a, Film b) {
return Integer.compare(a.getTitle().length(), b.getTitle().length());
}
}
并传递给 Arrays.sort()
FilmTitleComparator titleComparator = new FilmTitleComparator();
Arrays.sort(films, titleComparator);
然后films[0]
将包含标题最短的电影,而最后一个元素将是标题最长的电影。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句