Java compareTo导致堆栈溢出
我写了一节课,现在我想比较一天中的两个物体,看看哪一天是第二天 但问题是,当我尝试使用compareTo来比较这两天时,它会导致堆栈溢出 这是我创建的day类,请帮助了解为什么我不能使用compareToJava 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
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方法所做的就是调用它自己!