我有一个要编写的程序符合以下要求:
设计并实现在课程中实现星期几的课程日。上课日应该存储一天,例如太阳周日。该程序应该能够对Day类型的对象执行以下操作:
一个。设定一天。
B中。打印一天。
℃。回归这一天。
d。第二天回来。
电子。返回前一天。
F。通过在当天添加特定日期来计算并返回当天。例如,如果当天是星期一,我们添加四天,则返回的日期是星期五。同样,如果今天是星期二,我们加13天,则返回的日期是星期一。
-G。添加适当的构造函数。
小时。编写方法的定义以实现类Day的操作,如A到G中所定义。
予。编写一个程序来测试课堂上的各种操作。
现在,我已经查看了这个和其他网站上的各种帖子,阅读了我的资料,并在那里得到了我的程序。我只有一个棘手的问题:星期天。下面的代码执行我期望的一周中的每一天,除了星期天。
当我把我们的日子安排到SUN时,我确实得到了接下来的日子,10天等等,但我继续获得前一天的空白回报。我已经尝试了各种方法来解决这个问题,但我会继续回到它下面写的方式,因为它应该是这样的,但事实并非如此。我知道我不能像其他日子那样处理SUN,因为我不能从中减去1并期望程序可以正确返回的值,这就是为什么我已经告诉它设置如果值为SUN,我们的日期为SAT。
任何和所有的帮助都会非常感激,因为我相信我在这里错过了一些简单的东西,而且此时我只是碰到了我的头。
编辑感谢大家的意见。使用您的反馈我已经更改了代码,下面提供了更新的源代码。出于某种原因,虽然所有其他功能都在运行,但我仍然为previousDay输出空白。我清理了很多,因为有些人指出我做了一些不需要做的事情并且是多余的。
此时我几乎准备废弃我采取的方法并转向使用枚举或数组。对此有任何想法,或者我应该坚持到目前为止的所有内容?
FYI我的输出在运行时看起来像这样: 当天:星期天 前一天: 第二天:星期一 10天后:星期四
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();
}
}
答案 0 :(得分:1)
根据你的解释,我猜你的methot应该是这样的:
public int previousDay()
{
if (ourDay == SUN) {
return SAT;
} else {
return (ourDay - 1) % 7;
}
}
你首先对待SUN就像一个特例,然后你覆盖了我们的日子'定期计算。
如@JB Nizet所述,您的方法也应该返回计算日,而不会更改“我们的日期”的价值。代码已编辑。
以下是修改后方法的输出' previousDay()':
The current day: Sunday
The previous day: Saturday
缺少DayType强制更改main()类,因此如果您无法获得预期的输出,请随时询问,或者将所有相关代码包含在您的示例中。
答案 1 :(得分:1)
工作代码如下。感谢大家的评论,因为他们确实有所作为,我能够修剪一些线条,纠正一两个方法,并意识到我也错过了一些重要的东西。
公共课日
{
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();
}
}