日期:2014-05-18  浏览次数:20688 次

跪求一个Java算法问题
我的业务是这样的:
      小弟我正在开发一个教务管理系统,其中有一个排课的功能:需要实现根据,具体的开课时间,每星期上课的时间和总的课次生成具体的上课日期。比如:   开课日期是星期三,是6月1日,每周上课是
                          周一8:00-10:00
                          周三8:00-10:00
                          周六10:00-12:00
一共是10次课,生成具体的班级上课时间是
                          6月1日8:00-10:00第一次课
                          6月4日10:00-12:00第二次课
                          6月6日8:00-10:00   第三次课
                          .........
                          .........
请教高手,如何实现?感激万分



------解决方案--------------------
学习
------解决方案--------------------
没搞明白
------解决方案--------------------

不喜欢用“跪求”两个字!
------解决方案--------------------
package com.test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class Test5 {

  public static void main(String[] args) throws ParseException {

    List <Lesson> list = new ArrayList <Lesson> ();

    // 1表示星期日,7表示星期六
    Lesson less1 = new Lesson(2, "8:00——10:00 ");
    Lesson less2 = new Lesson(4, "10:00——11:00 ");
    Lesson less3 = new Lesson(7, "10:00——12:00 ");
    list.add(less1);
    list.add(less2);
    list.add(less3);
    // list最好能排序

    // 总的上课次数
    int total = 10;
    // 开课日期,并非要与日期对应,可以是开课星的星期一或这个星的任何一天。
    String startDate = "2007-07-01 ";
    SimpleDateFormat s = new SimpleDateFormat( "yyyy-MM-dd ");
    Date d = s.parse(startDate);
    teachList(list, total, d);
  }

  public static void teachList(List <Lesson> list, int total, Date startDate) {
    Calendar c = Calendar.getInstance();
    c.setTime(startDate);
    c.set(Calendar.DAY_OF_WEEK, list.get(0).getWeek());
    if (c.getTimeInMillis() < startDate.getTime()) {
      c.add(Calendar.DATE, 7);
    }
    StringBuffer sb = new StringBuffer();
    int i = 1;
    while (i <= total) {
      for (Lesson less : list) {
        c.set(Calendar.DAY_OF_WEEK, less.getWeek());
        SimpleDateFormat s = new SimpleDateFormat( "yyyy年MM月dd日 E ");
        sb.append( "第 ").append(i).append( "次课 ");
        sb.append(s.format(c.getTime())).append( " ");
        sb.append(less.getTime()).append( "\n ");
        ++i;
        if (i > total) {
          break;
        }
      }
      c.add(Calendar.DATE, 7);
    }
    sb.trimToSize();
    System.out.println(sb.toString());
  }
}

class Less