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

Java 设计并实现在程序中实现星期几的上课日,java,Java,我有一个程序要编写,具有以下要求: 设计并实现在程序中实现星期几的上课日。上课日应存储当天,如周日的太阳。程序应能够对Day类型的对象执行以下操作: 确定日期 B.打印日期 C.当天返回 第二天回来 E.前一天返回 F.通过将某些天添加到当前天来计算并返回该天。例如,如果当前日期是星期一,我们加上四天,则返回的日期是星期五。同样,如果今天是星期二,加上13天,返回的日期是星期一 G.添加适当的构造函数 H.编写方法的定义,以实现从A到G中定义的上课日操作 I.编写一个程序,在上课日测试各种操作

我有一个程序要编写,具有以下要求:

设计并实现在程序中实现星期几的上课日。上课日应存储当天,如周日的太阳。程序应能够对Day类型的对象执行以下操作:

确定日期

B.打印日期

C.当天返回

第二天回来

E.前一天返回

F.通过将某些天添加到当前天来计算并返回该天。例如,如果当前日期是星期一,我们加上四天,则返回的日期是星期五。同样,如果今天是星期二,加上13天,返回的日期是星期一

G.添加适当的构造函数

H.编写方法的定义,以实现从A到G中定义的上课日操作

I.编写一个程序,在上课日测试各种操作

现在,我已经看了这个网站和其他网站上的各种帖子,阅读了我的资料,并在那里得到了我的程序。我只有一个烦人的问题:星期天。下面的代码实现了我一周中每一天所期望的一切,除了周日

当我把我们的一天定在太阳上时,我确实得到了下一天,10天的假期等等,但我一直得到前一天的空白回报。我已经尝试了各种方法来实现这一点,但我一直回到下面写的方式,认为这是它应该工作的方式,但事实并非如此。我知道我不能像其他日子一样处理SUN,因为我不能从中减去1并期望程序能够正确返回一个值,这就是为什么我告诉它,如果值是SUN,则将我们的日期设置为SAT

任何和所有的帮助都将不胜感激,因为我相信我在这里错过了一些简单的东西,我只是在这一点上敲打我的头

编辑感谢大家的意见。根据您的反馈,我更改了代码,下面提供了更新的源代码。由于某种原因,我仍然得到前一天的空白输出,尽管所有其他函数都在工作。我清理了很多东西,正如你们中的一些人指出的,我正在做一些不需要做的事情,而且是多余的

现在,我几乎准备放弃我所采取的方法,转而使用枚举或数组。有什么想法吗,或者我应该坚持到目前为止的想法吗

仅供参考运行时,我的输出如下所示: 当日:星期日 前一天: 第二天:星期一 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();               
        }       
}

根据你的解释,我想你的方法应该是这样的:

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