Java 时间表功能不工作

Java 时间表功能不工作,java,class,user-interface,netbeans,methods,Java,Class,User Interface,Netbeans,Methods,我想写一段代码,生成一个时间表。该函数编译得很好,但结果不是我所期望的 方法: public String generateTimeTable(){ //2 arrays for all the months of the year and days of the week. String[] months = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};

我想写一段代码,生成一个时间表。该函数编译得很好,但结果不是我所期望的

方法:

         public String generateTimeTable(){
    //2 arrays for all the months of the year and days of the week.
    String[] months = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
    String[] days = {"Mon","Tue","Wed","Thur","Fri","Sat","Sun"};



    DateTime today = new DateTime();
    DateTime start = today.plusDays(1).withTime(8, 0, 0, 0); // this makes it start at 8am the next day
    String finalString = "On" + " " + days[start.getDayOfWeek()-1] + " "+ start.getDayOfMonth() + " " + months[start.getMonthOfYear() - 1] + "\n"; //This is the string for the first day.
    // It should return something like "On Mon 13 February
    ArrayList<Course> list = listOfCourses(); //get a sorted list of courses



    while (start.toLocalDate().isBefore(this.startOfExams)) { // loop for everyday up until the start of exams
        String sub1 = list.get(0).toString() + "...from " + new Interval(start, start.plusHours(3)).toString().substring(11, 16) + " to " + new Interval(start, start.plusHours(3)).toString().substring(41, 46) + "\n";
        finalString += sub1;
        finalString += "\n";




        String break1 = "break...from " + new Interval(start.plusHours(3), start.plusHours(4)).toString().substring(11, 16) + " to " + new Interval(start.plusHours(3), start.plusHours(4)).toString().substring(41, 46) + "\n";
        // String break1 = "break..." + new Interval(start.plusHours(3), start.plusHours(4)) + "\n";
        finalString += break1;
        finalString += "\n";


        String sub2 = list.get(1).toString() + "..." + new Interval(start.plusHours(4), start.plusHours(7)) + "\n";
        finalString += sub2;
        finalString += "\n";


        String break2 = "LunchBreak...You need to eat! " + new Interval(start.plusHours(7), start.plusHours(8)) + "\n";
        finalString += break2;
        finalString += "\n";



        String sub3 = list.get(2).toString() + "..." + new Interval(start.plusHours(8), start.plusHours(10)) + "\n";
        finalString += sub3;
        finalString += "\n";


        String break3 = "break..." + new Interval(start.plusHours(10), start.plusHours(11)) + "\n";
        finalString += break3;
        finalString += "\n";


        String sub4 = list.get(3).toString() + "..." + new Interval(start.plusHours(11), start.plusHours(13)) + "\n";
        finalString += sub4;
        finalString += "\n";


        String break4 = "break..." + new Interval(start.plusHours(13), start.plusHours(14)) + "\n";
        finalString += break4;
        finalString += "\n";


        String sub5 = list.get(4).toString() + "..." + new Interval(start.plusHours(14), start.plusHours(15)) + "\n";
        finalString += sub5;
        finalString += "\n";


        String sub6 = list.get(5).toString() + "..." + new Interval(start.plusHours(15), start.plusHours((int) 15.5)) + "\n";
        //finalString += sub6;
        //finalString += "\n";


        start = start.plusDays(1); // Move along to the next day.

        finalString += "\n";
        finalString += "On" + " " + days[start.getDayOfWeek()-1] + " "+ start.getDayOfMonth() + " " + months[start.getMonthOfYear() - 1] + "\n";


    }
    return finalString + "EXAMM DAYYY!";


}
但是它没有打印我的时间表,而是在4月1日星期五打印出来 ExammDayyy


有人知道为什么会这样吗?

在Java
Date
类中,月份是从0而不是从1索引的。所以你是在为4月1日而不是3月1日制定时间表。这可能是你想要的;我不确定

在任何情况下,您都要为4月1日构建一个时间表,然后将开始日期设置为4月1日加上一天,即4月2日。这会导致
while
循环出现问题,该循环从不运行:开始日期在考试日期之后

您需要解决的另一个问题是,您没有在生成的
列表中循环。您正在使用固定索引来检索元素,这可能适用于您当前的设置,但它非常脆弱:如果更改课程数量,您必须记住更改
while
循环体。最好使用
for
循环遍历列表并打印元素。这是一个您目前没有真正遇到的问题,因为您的
while
循环根本没有被执行


它将帮助您学习如何使用IDE中的调试工具:您可以逐行遍历代码,并查看执行的内容。

似乎您正在3月31日运行该程序,所以 程序中使用的日期变量如下所示 examStart=2016年3月1日和 开始日期=3月31日(今天)+1天,即4月1日

而循环条件被评估为false,即在examstart之前未启动 因此,只打印在循环外求值的字符串

                  public static void main(String[] args) {
    // TODO Auto-generated method stub
    LocalDate examStart = new LocalDate(2016, 3, 1);

    Course chem = new Course("Chemistry", 2, examStart);
    Course math = new Course("Mathematics", 5, examStart);
    Course phys = new Course("physics", 8, examStart);
    Course french = new Course("French", 5, examStart);
    Course Bio = new Course("Biology", 3, examStart);
    Course eng = new Course("English", 6, examStart);


    TimeTable tt = new TimeTable(2016, 3, 1);

    tt.addCourse(chem);
    tt.addCourse(math);
    tt.addCourse(phys);
    tt.addCourse(french);
    tt.addCourse(Bio);
    tt.addCourse(eng);

    //FIRST THINGS FIRST: complete testing of updating confidence.
    //tt.updateConfidence("French", 1);

    String finals = tt.generateTimeTable();

    System.out.print(finals);




}