Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CompareTo和collections.sort()错误_Java_Sorting - Fatal编程技术网

Java CompareTo和collections.sort()错误

Java CompareTo和collections.sort()错误,java,sorting,Java,Sorting,我在collections.sort方面遇到了问题,因为它没有对任何内容进行排序。我有两个类,一个类有一个比较日期的compareTo方法,另一个类有一个Collections.sort对日期进行排序。我的代码编译并运行时没有错误,但是ArrayList没有排序,有人能告诉我我做错了什么,以及Collections.sort不工作的原因吗 代码如下: public class CalendarDate implements Comparable<CalendarDate>{

我在collections.sort方面遇到了问题,因为它没有对任何内容进行排序。我有两个类,一个类有一个比较日期的compareTo方法,另一个类有一个Collections.sort对日期进行排序。我的代码编译并运行时没有错误,但是ArrayList没有排序,有人能告诉我我做错了什么,以及Collections.sort不工作的原因吗

代码如下:

public class CalendarDate implements Comparable<CalendarDate>{ 

    private int month;
    private int day;

    //Constructor
    public CalendarDate(int month, int day){
        this.month = month;
        this.day = day;
    }

    //CompareTo method
    public int CompareTo(CalendarDate other){
        if(month != other.month){
             return month - other.month;
        } 
        else {
            return day - other.day;
        }
    }


    //Getters
    public int getMonth(){
        return month;
    }

    public int getDay(){
        return day;
    }

    //toString method
    public String toString(){
        return month + "/" + day;
    }

public int compareTo(CalendarDate other) {
    return 0;
}
}
公共类CalendarDate实现可比较的{
私人整数月;
私人国际日;
//建造师
公共日历日期(整数月,整数日){
本月=月;
this.day=天;
}
//比较法
公共整数比较(日历日期其他){
如果(月)=其他月份){
返回月份-其他月份;
} 
否则{
返回日-其他日期;
}
}
//吸气剂
公共整数getMonth(){
返回月份;
}
public int getDay(){
回归日;
}
//toString方法
公共字符串toString(){
返回月份+“/”+天;
}
公共整数比较(日历日期其他){
返回0;
}
}

import java.util.*;
公共类日历日期排序{
公共静态void main(字符串[]args){
ArrayList=新建ArrayList();
添加(新日历日期(1,11));
添加(新日历日期(5,15));
添加(新日历日期(3,8));
添加(新日历日期(7,10));
添加(新日历日期(3,16));
System.out.println(“排序前的日期=”+列表);
集合。排序(列表);
System.out.println(“排序后的日期=”+列表);
}
}

您将返回一个固定值
0
,这将导致列表项永远无法排序。
CompareTo
方法中的逻辑需要包含在
CompareTo
方法中

@Override
public int compareTo(CalendarDate other) {
    if (month != other.month) {
        return month - other.month;
    } else {
        return day - other.day;
    }
}

您将返回一个固定值
0
,这将导致列表项永远无法排序。
CompareTo
方法中的逻辑需要包含在
CompareTo
方法中

@Override
public int compareTo(CalendarDate other) {
    if (month != other.month) {
        return month - other.month;
    } else {
        return day - other.day;
    }
}

进行比较的
CompareTo
方法有输入错误,并且名称不同。Java标识符区分大小写。实际调用的
compareTo
始终返回0(表示所有元素相等)

公共类CalendarDate实现可比较{
//不会被分类调用
公共整数比较(日历日期其他){
如果(月)=其他月份){
返回月份-其他月份;
} 
否则{
返回日-其他日期;
}
}
//按排序调用
公共整数比较(日历日期其他){
返回0;
}
}
使用
@Override
注释。如果您犯这种错误,它将生成编译错误

另见

重写方法时,您可能希望使用@Override注释来指示编译器您打算重写超类中的方法。如果出于某种原因,编译器检测到某个超类中不存在该方法,那么它将生成一个错误


进行比较的
CompareTo
方法有输入错误,并且名称不同。Java标识符区分大小写。实际调用的
compareTo
始终返回0(表示所有元素相等)

公共类CalendarDate实现可比较{
//不会被分类调用
公共整数比较(日历日期其他){
如果(月)=其他月份){
返回月份-其他月份;
} 
否则{
返回日-其他日期;
}
}
//按排序调用
公共整数比较(日历日期其他){
返回0;
}
}
使用
@Override
注释。如果您犯这种错误,它将生成编译错误

另见

重写方法时,您可能希望使用@Override注释来指示编译器您打算重写超类中的方法。如果出于某种原因,编译器检测到某个超类中不存在该方法,那么它将生成一个错误


因为您的
compareTo(CalendarDate)
方法始终返回0


用伪
CompareTo()
方法中的代码替换
返回0
。将
@Override
注释添加到
compareTo()
(以及您希望与某些接口匹配的其他方法);如果键入方法名称或弄乱签名,这将导致编译器错误。

因为
compareTo(CalendarDate)
方法始终返回0


用伪
CompareTo()
方法中的代码替换
返回0
。将
@Override
注释添加到
compareTo()
(以及您希望与某些接口匹配的其他方法);如果键入方法名或弄乱签名,这将导致编译器错误。

现在可以了谢谢,但我现在有个问题。我不明白为什么一定要这样overriding@Ruben当您实现
compareTo
时,它被称为覆盖(无论您是否对其进行注释)。它现在可以工作了谢谢,但我现在有一个问题。我不明白为什么一定要这样overriding@Ruben当您实现
compareTo
时,它被称为覆盖(无论您是否对其进行注释)。
public class CalendarDate implements Comparable<CalendarDate>{

    // doesn't get called by sort
    public int CompareTo(CalendarDate other){
        if(month != other.month){
             return month - other.month;
        } 
        else {
            return day - other.day;
        }
    }

    // gets called by sort
    public int compareTo(CalendarDate other) {
        return 0;
    }
}