public class Receipt implements Comparable<Receipt>
{
private int number;
private int customer;
private float amount;
public static boolean compare_by_customer = false;
public Receipt(String line){
// System.out.println(line);
String[] split = line.split(",");
number = Integer.parseInt(split[0]);
//System.out.println(split[1]);
customer = Integer.parseInt(split[1]);
//System.out.println(split[1] );
amount = Float.parseFloat(split[2].substring(1));
// System.out.println(split[2].substring(1));
}
public int compareTo(Receipt other){
return (compare_by_customer)? customer-other.customer : number- other.number;
}
public String toString(){
return String.valueOf(number)+","+String.valueOf(customer)+",$"+String.valueOf(amount);
}
}
我得到了以下错误,尽管我已经在我的收据类中重写了compareTo方法以用作arrayList。任何人都可以解释错误的原因。
Main.java:28: error: no suitable method found for sort(ArrayList<Comparable<Receipt>>)
array.sort(array); work = false; break;
^
method List.sort(Comparator<? super Comparable<Receipt>>) is not applicable
(argument mismatch; ArrayList<Comparable<Receipt>> cannot be converted to Comparator<? super Comparable<Receipt>>)
method ArrayList.sort(Comparator<? super Comparable<Receipt>>) is not applicable
(argument mismatch; ArrayList<Comparable<Receipt>> cannot be converted to Comparator<? super Comparable<Receipt>>)
答案 0 :(得分:1)
更改
ArrayList<Comparable<Receipt>> array = reader.getReceipts();
到
ArrayList<Receipt> array = reader.getReceipts();
使用collections.sort()。it将起作用。
答案 1 :(得分:1)
您实际上是在List对象上调用函数排序
List.sort(Comparator<? super E> c)
它期待Comparator的一个实例,但是你将ArrayList的对象作为参数传递。
您可以致电array.sort(null);
或者,如果您想使用实用程序类集合进行排序,则可以按以下方式调用
Collections.sort(array);
答案 2 :(得分:0)
尝试ArrayList<Receipt> array = reader.getReceipts();
异常来自您尝试运行的方法调用。 在List上调用的sort()方法将比较器上的实现作为参数,该比较器确定列表中元素的顺序(您需要从该接口实现compare(T o1,T o2)方法,或使用Collections.sort( )使用Coparable接口。
答案 3 :(得分:0)
ArrayList或其超类没有方法sort()
。因此,您应该收到编译错误,指出方法sort
未定义。
您的收藏品的列表类型也不正确。您可能希望使用Receipt
的集合,而不是Comparable
类型的对象集合。因此,您的集合解除应该如下所示。(您还应该更改getReceipts方法,以便它返回一个收据的ArrayList。)
ArrayList<Receipt> array = reader.getReceipts();
最后,正确调用Collections.sort()。
case 4: Collections.sort(array); break;
答案 4 :(得分:0)
您需要仔细查看您的大括号如何排列,因为它嵌入在您的主方法中,因为它从未被调用过sortMenu()
。我会将sortMenu()
方法与下面的主要方法分开,然后从main中调用它。您的Receipt
类看起来很好,但是在创建数组并尝试对其进行排序时,您没有正确实现compareTo
方法。您需要更改的行是:将main
方法和sortMenu
方法分开,如下所示。
public static void main(String[] args)
{
sortMenu(reader);
}
private static void sortMenu(ReceiptReader reader){
{
boolean work = true, writeback = true;
Scanner sc = new Scanner(System.in);
.
.
.
}
然后对sortMenu()
方法进行更改:
假设您从reader.getReceipts
返回了一个好的列表。正如有人已经指出的那样,您应该更改数组定义,如下所示:正如我们已经知道Receipt
对象具有可比性。
ArrayList<Receipt> array = reader.getReceipts();
然后使用compareTo
对象中的Receipt
方法对数组进行排序,请更改以下行。我们使用null来表示我们已经知道它是可比较的,我们想要使用默认的compareTo
方法,否则你可以发送一些其他排序方法,这就是为什么它不起作用,因为你发布它。
array.sort(null);
我做了这些改动,但效果很好。希望这会有所帮助。