Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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导致堆栈溢出_Java - Fatal编程技术网

Java compareTo导致堆栈溢出

Java compareTo导致堆栈溢出,java,Java,我写了一节课,现在我想比较一天中的两个物体,看看哪一天是第二天 但问题是,当我尝试使用compareTo来比较这两天时,它会导致堆栈溢出 这是我创建的day类,请帮助了解为什么我不能使用compareTo public class Day implements Cloneable,Comparable<Day>{ private int year; private int month; private int day; private static final String Mo

我写了一节课,现在我想比较一天中的两个物体,看看哪一天是第二天

但问题是,当我尝试使用compareTo来比较这两天时,它会导致堆栈溢出

这是我创建的day类,请帮助了解为什么我不能使用compareTo

public class Day implements Cloneable,Comparable<Day>{

private int year;
private int month;
private int day;

private static final String MonthNames="JanFebMarMayJunJulAugSepOctNovDec";
//Constructor
public Day(int y, int m, int d) {
    this.year=y;
    this.month=m;
    this.day=d;     
}


 public void set(String sDay) 
{
    String[] sDayParts = sDay.split("-");
    this.year = Integer.parseInt(sDayParts[2]);
    this.day = Integer.parseInt(sDayParts[0]);
    this.month = MonthNames.indexOf(sDayParts[1])/3+1;
}

public Day(String sDay)
{
    set(sDay);


}


// Return a string for the day like dd MMM yyyy
public String toString() {

    return day+"-"+ MonthNames.substring((month-1)*3,month*3)+ "-"+ year;
}



@Override
public int compareTo(Day another)
{

    return this.compareTo(another);
}
公共课日实现可克隆、可比较{
私人国际年;
私人整数月;
私人国际日;
私有静态最终字符串MonthNames=“janfebarmayjunjulaugsepoctnovdec”;
//建造师
公众日(整数y、整数m、整数d){
本年=y;
本月=m;
这一天=d;
}
公共无效集(字符串星期四)
{
字符串[]sDayParts=sDay.split(“-”);
this.year=Integer.parseInt(sDayParts[2]);
this.day=Integer.parseInt(sDayParts[0]);
this.month=MonthNames.indexOf(sDayParts[1])/3+1;
}
公众日(星期四)
{
星期四(星期四);;
}
//返回日期的字符串,如dd MMM yyy
公共字符串toString(){
返回日+“-”+月数子字符串((第1个月)*3,第3个月)+“-”+年;
}
@凌驾
公共int比较(另一天)
{
返回此。比较到(另一个);
}

您有一个很好的无限递归

@Override
public int compareTo(Day another)
{

    return this.compareTo(another);
}

这是一个递归调用。您必须实际实现自己的
比较,以
正文,例如检查日期

您有一个方法,该方法会无休止地调用它的字段,直到堆栈爆炸

@Override
public int compareTo(Day another)
{
    return this.compareTo(another); // calls itself until the stack is exhuased
}
你需要做的是比较类的字段

@Override
public int compareTo(Day d) {
    int cmp = Integer.compare(year, d.year);
    if (cmp == 0) cmp = Integer.compare(month, d.month);
    if (cmp == 0) cmp = Integer.compare(day, d.day);
    return cmp;
}

当然可以。你的compareTo方法所做的就是调用它自己!