Java 设计并实现在程序中实现星期几的上课日
我有一个程序要编写,具有以下要求: 设计并实现在程序中实现星期几的上课日。上课日应存储当天,如周日的太阳。程序应能够对Day类型的对象执行以下操作: 确定日期 B.打印日期 C.当天返回 第二天回来 E.前一天返回 F.通过将某些天添加到当前天来计算并返回该天。例如,如果当前日期是星期一,我们加上四天,则返回的日期是星期五。同样,如果今天是星期二,加上13天,返回的日期是星期一 G.添加适当的构造函数 H.编写方法的定义,以实现从A到G中定义的上课日操作 I.编写一个程序,在上课日测试各种操作 现在,我已经看了这个网站和其他网站上的各种帖子,阅读了我的资料,并在那里得到了我的程序。我只有一个烦人的问题:星期天。下面的代码实现了我一周中每一天所期望的一切,除了周日 当我把我们的一天定在太阳上时,我确实得到了下一天,10天的假期等等,但我一直得到前一天的空白回报。我已经尝试了各种方法来实现这一点,但我一直回到下面写的方式,认为这是它应该工作的方式,但事实并非如此。我知道我不能像其他日子一样处理SUN,因为我不能从中减去1并期望程序能够正确返回一个值,这就是为什么我告诉它,如果值是SUN,则将我们的日期设置为SAT 任何和所有的帮助都将不胜感激,因为我相信我在这里错过了一些简单的东西,我只是在这一点上敲打我的头 编辑感谢大家的意见。根据您的反馈,我更改了代码,下面提供了更新的源代码。由于某种原因,我仍然得到前一天的空白输出,尽管所有其他函数都在工作。我清理了很多东西,正如你们中的一些人指出的,我正在做一些不需要做的事情,而且是多余的 现在,我几乎准备放弃我所采取的方法,转而使用枚举或数组。有什么想法吗,或者我应该坚持到目前为止的想法吗 仅供参考运行时,我的输出如下所示: 当日:星期日 前一天: 第二天:星期一 10天后:星期四Java 设计并实现在程序中实现星期几的上课日,java,Java,我有一个程序要编写,具有以下要求: 设计并实现在程序中实现星期几的上课日。上课日应存储当天,如周日的太阳。程序应能够对Day类型的对象执行以下操作: 确定日期 B.打印日期 C.当天返回 第二天回来 E.前一天返回 F.通过将某些天添加到当前天来计算并返回该天。例如,如果当前日期是星期一,我们加上四天,则返回的日期是星期五。同样,如果今天是星期二,加上13天,返回的日期是星期一 G.添加适当的构造函数 H.编写方法的定义,以实现从A到G中定义的上课日操作 I.编写一个程序,在上课日测试各种操作
public class Day
{
final static int SUN = 0;
final static int MON = 1;
final static int TUE = 2;
final static int WED = 3;
final static int THU = 4;
final static int FRI = 5;
final static int SAT = 6;
public static int ourDay;
public void setDay()
{this.ourDay = ourDay;}
public void DayType()
{this.ourDay = ourDay;}
public int nextDay()
{
if (ourDay == SAT)
{return SUN;}
else
{ourDay = (ourDay + 1) % 7;}
return ourDay;
}
public int previousDay()
{
if (ourDay == SUN)
{return SAT;}
else
{ourDay = (ourDay - 1) % 7;}
return ourDay;
}
public int futureDay(int ourDays)
{return (ourDay + ourDays) % 7;}
public String toString()
{
switch (this.ourDay)
{
case SUN:
return "Sunday";
case MON:
return "Monday";
case TUE:
return "Tuesday";
case WED:
return "Wednesday";
case THU:
return "Thursday";
case FRI:
return "Friday";
case SAT:
return "Saturday";
}
return "";
}
public static void main(String[] args)
{
DayType outDay = new DayType(SUN);
System.out.print("The current day: " + outDay);
System.out.println();
outDay.setDay(outDay.previousDay());
System.out.print("The previous day: " + outDay);
System.out.println();
outDay.setDay(outDay.nextDay());
outDay.setDay(outDay.nextDay());
System.out.print("The next day: " + outDay);
System.out.println();
outDay.setDay(outDay.futureDays(10));
System.out.print("10 days later: " + outDay);
System.out.println();
}
}
根据你的解释,我想你的方法应该是这样的:
public int previousDay()
{
if (ourDay == SUN) {
return SAT;
} else {
return (ourDay - 1) % 7;
}
}
您首先将SUN视为特例,然后用常规计算覆盖“我们的一天”
正如@JB Nizet所提到的,您的方法还应该返回计算的日期,而不更改“ourDay”的值。代码已编辑
以下是修改后的方法“previousDay()”的输出:
缺少DayType会强制在main()类中进行更改,因此,如果您自己无法获得预期的输出,请随时询问,或将所有相关代码包含到示例中。下面是工作代码。感谢大家的评论,因为他们确实起到了作用,我能够修剪一些线条,纠正一两种方法,并且意识到我也遗漏了一些重要的东西 公课日
{
final static int SUN = 0;
final static int MON = 1;
final static int TUE = 2;
final static int WED = 3;
final static int THU = 4;
final static int FRI = 5;
final static int SAT = 6;
public int ourDay;
public Day(int ourDay)
{this.ourDay = ourDay;}
public void setDay(int ourDay)
{this.ourDay = ourDay;}
public int getDay()
{return ourDay;}
public int followingDay()
{
if (ourDay == SAT)
{return SUN;}
else {ourDay = (ourDay + 1) % 7;}
return ourDay;
}
public int previousDay()
{
if (ourDay == 0)
{return SAT;}
else {ourDay = (ourDay - 1) % 7;}
return ourDay;
}
public int futureDay(int ourDays)
{return ((ourDay + ourDays) -1 ) % 7;}
public String toString()
{
switch (this.ourDay)
{
case SUN:
return "Sunday";
case MON:
return "Monday";
case TUE:
return "Tuesday";
case WED:
return "Wednesday";
case THU:
return "Thursday";
case FRI:
return "Friday";
case SAT:
return "Saturday";
}
return "";
}
public static void main(String[] args)
{
Day outDay = new Day(SUN);
System.out.print("The current day: " + outDay);
System.out.println();
outDay.setDay(outDay.previousDay());
System.out.print("The previous day: " + outDay);
System.out.println();
outDay.setDay(outDay.followingDay());
outDay.setDay(outDay.followingDay());
System.out.print("The next day: " + outDay);
System.out.println();
outDay.setDay(outDay.futureDay(10));
System.out.print("10 days later: " + outDay);
System.out.println();
}
}
你应该像前一天一样返回SAT。不将当前日期更改为SAT,然后再次更改。DayType的代码在哪里?为什么要显式将ourDay设置为SAT,然后在previous和nextDay()方法中使用%7显式计算ourDay?这仍然会将当前日期设置为前一天,与其简单地按要求返回前一天的答案,不如改一下你的答案?@JBNizet你又对了。我只是又累又暴躁:)谢谢你的帮助。我已经更新了我的代码,并在上面发布了一些附加注释。不幸的是,前一天我仍然一无所获,这让我很困惑。我宁愿得到一个错误的答案,也不愿什么都没有。@JHCummins尝试调试您的代码。空字符串的唯一逻辑位置是在toString()方法中。请尝试打印ourDay的值,或引发一些异常,而不是返回“”。您仍然没有包括DayType,所以我假设您的bug在那里。
{
final static int SUN = 0;
final static int MON = 1;
final static int TUE = 2;
final static int WED = 3;
final static int THU = 4;
final static int FRI = 5;
final static int SAT = 6;
public int ourDay;
public Day(int ourDay)
{this.ourDay = ourDay;}
public void setDay(int ourDay)
{this.ourDay = ourDay;}
public int getDay()
{return ourDay;}
public int followingDay()
{
if (ourDay == SAT)
{return SUN;}
else {ourDay = (ourDay + 1) % 7;}
return ourDay;
}
public int previousDay()
{
if (ourDay == 0)
{return SAT;}
else {ourDay = (ourDay - 1) % 7;}
return ourDay;
}
public int futureDay(int ourDays)
{return ((ourDay + ourDays) -1 ) % 7;}
public String toString()
{
switch (this.ourDay)
{
case SUN:
return "Sunday";
case MON:
return "Monday";
case TUE:
return "Tuesday";
case WED:
return "Wednesday";
case THU:
return "Thursday";
case FRI:
return "Friday";
case SAT:
return "Saturday";
}
return "";
}
public static void main(String[] args)
{
Day outDay = new Day(SUN);
System.out.print("The current day: " + outDay);
System.out.println();
outDay.setDay(outDay.previousDay());
System.out.print("The previous day: " + outDay);
System.out.println();
outDay.setDay(outDay.followingDay());
outDay.setDay(outDay.followingDay());
System.out.print("The next day: " + outDay);
System.out.println();
outDay.setDay(outDay.futureDay(10));
System.out.print("10 days later: " + outDay);
System.out.println();
}
}