设计并实现在课程中实现星期几的课程日

时间:2015-02-28 22:26:32

标签: java

我有一个要编写的程序符合以下要求:

设计并实现在课程中实现星期几的课程日。上课日应该存储一天,例如太阳周日。该程序应该能够对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();               
        }       
}

2 个答案:

答案 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();               
        }       
}