这次试着更具体点。
总的想法是:
无法获得类日期以允许我提供返回类型日期。
接口代码:
public interface elapsed
{
/*
* a year can have 365 or 366 days
* depending on "leap-year".
* February can have 28 or 29 days
* also depending on "leap-year"
*/
public static final int days_week = 7;
public static final int weeks_year = 52;
//add any number of days to a date
public date addDays (int d);
//subtract any number of days from a day
public date subDays (int d);
}所以类日期必须使用subDays和addDays。好的。我决定不使用subDays,因为我可以翻转输入的任何整数d的值,并使用相同的数学。
所以我的班级约会看起来是:
public class date implements elapsed
{
int day;
int month;
int year;
public date (int Day, int Month, int Year)
{
day = Day;
month = Month;
year = Year;
}
public date ()
{
}
public int getDay()
{
return day;
}
public int getMonth()
{
return month;
}
public int getYear()
{
return year;
}
public date addDays (int x)
{
int d = getDay();
int m = getMonth();
int y = getYear();
m = (m + 9) % 12;
y = y - (m / 10);
int g = (365 * y) + (y / 4) - (y / 100) + (y / 400) + (( m * 306 + 5) / 10) + ( d - 1 );
g = g + x; //adds days to the g variable which is the date from clock start
y = (10000 * g + 14780)/3652425;
int ddd = g - (365 * y + y / 4 - y / 100 + y / 400);
if (ddd < 0) //manages the occurrences of leap years
{
y = y - 1;
ddd = g - (365*y + y/4 - y/100 + y/400);
}
int mi = (100 * ddd + 52) / 3060;
int mm = (mi + 2) % 12 + 1;
y = y + (mi + 2) / 12;
int dd = ddd - (mi * 306 + 5) / 10 + 1;
return new date(dd, mm, y);
}
public date subDays (int x)
{
int d = getDay();
int m = getMonth();
int y = getYear();
m = (m + 9) % 12;
y = y - (m / 10);
int g = (365 * y) + (y / 4) - (y / 100) + (y / 400) + (( m * 306 + 5) / 10) + ( d - 1 );
g = g - x; //subtracts days to the g variable which is the date from clock start
y = (10000 * g + 14780)/3652425;
int ddd = g - (365 * y + y / 4 - y / 100 + y / 400);
if (ddd < 0) //manages the occurrences of leap years
{
y = y - 1;
ddd = g - (365*y + y/4 - y/100 + y/400);
}
int mi = (100 * ddd + 52) / 3060;
int mm = (mi + 2) % 12 + 1;
y = y + (mi + 2) / 12;
int dd = ddd - (mi * 306 + 5) / 10 + 1;
return new date(dd, mm, y);
}
public String toString(int day, int month, int year) // formats the date into something nicer
{
String formMonth = null;
switch(month)
{
case 1:
formMonth = "Jan";
break;
case 2:
formMonth = "Feb";
break;
case 3:
formMonth = "Mar";
break;
case 4:
formMonth = "Apr";
break;
case 5:
formMonth = "May";
break;
case 6:
formMonth = "Jun";
break;
case 7:
formMonth = "Jul";
break;
case 8:
formMonth = "Aug";
break;
case 9:
formMonth = "Sep";
break;
case 10:
formMonth = "Oct";
break;
case 11:
formMonth = "Nov";
break;
case 12:
formMonth = "Dec";
break;
default:
System.exit(0);
}
String formDate = day + formMonth + year;
return formDate;
}
} //class end brackets我需要那个addDays来返回一个日期,但是我不知道如何去做或者使用什么语法。我觉得界面没有给我们,但我知道些什么。
我只是需要它来呈现一个新的日期,以便在我的主语中只使用日期d2 =d1.addDays(X)之类的内容;
把它放进我必须建造的字符串里,让它看起来很漂亮。
这个问题更有意义吗?
谢谢你的帮助。
发布于 2014-07-23 19:55:02
我不是百分之百确定你在这里问什么,所以这更像是一个疯狂的猜测,但我有点自信。
在addDays方法中,您希望创建并返回一个新日期。为此,您可以从当前日期获取数据并将给定的天数添加到这些值中,然后调用date构造函数返回一个新实例。到目前为止,你走在正确的轨道上!唯一的问题似乎是,构造函数不是像this.date(...)那样调用的实例的方法,而是必须像new date(...)一样调用的方法。
public date addDays (int x) {
int d = getDay();
int m = getMonth();
int y = getYear();
// date adding logic, did not check, assuming to be correct
return new date(dd, mm, y);
}发布于 2014-07-23 20:18:49
如果您只希望addDays()返回一个日期,那么只需执行以下操作:
public date addDays(int x)
{
return new date(dd,mm,yy);
} 也是
public String toString()
{
}https://stackoverflow.com/questions/24919523
复制相似问题