0

どういうわけか、きれいな方法でコーディングする方法を理解できません。タスク オブジェクトがあり、このオブジェクトには開始日と終了日があります。このオブジェクトをメソッドに渡し、このタスクを実行し、頻度に応じて X 回複製し、開始日を発生日に設定します。

もちろん、例を使って物事をよりよく説明することができます。つまり、開始日が 2012 年 6 月 1 日で終了日が 2012 年 9 月 15 日のタスクがあるとします。頻度は毎月に設定されています。このタスクを、開始日がそれぞれの月の最初に設定されている 4 つのタスク (6 月、7 月、8 月、9 月) の配列を作成するメソッドに渡したい

ArrayList<task> spawnTasks(Task task, Frequency Monthly){
    ArrayList<Task> arr  = new  ArrayList<Task>();

    Task TaskJune = task.clone();
    TaskJune.setStartDate("June, 1, 2012");       

    Task TaskJuly = task.clone();
    TaskJuly.setStartDate("July, 1, 2012");     

    Task TaskAug = task.clone();
    Taskaug.setStartDate("Aug, 1, 2012");     

    Task TaskSept = task.clone();
    TaskSept.setStartDate("Sept, 1, 2012");     

}

ご覧のとおり、頻度が月単位であるため(隔週または月単位のみを使用できます)、月に 1 回タスクを作成しました。これは開始日が 1 日であり、終了日が 9 月 15 日であるため、9 月を超えることはありませんでした。

それを行うにはカレンダーとループを使用する必要があることは知っていますが、それを理解することはできません

4

1 に答える 1

0

これを試して:

private List<Task> spawn(Task original, Frequency frequency) {

    Date sd = original.getSd();
    Date ed = original.getEd();

    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(sd.getTime());

    List<Task> tasks = new ArrayList<Task>();
    for (; cal.getTimeInMillis() <= ed.getTime(); cal.add(frequency.getFrequency(), frequency.getMultiplier())) {
        Task task = original.clone();
        task.setSd(cal.getTime());

        tasks.add(task);
    }

    return tasks;
}

public enum Frequency {

    WEEKLY(Calendar.WEEK_OF_YEAR, 1),
    BIWEEKLY(Calendar.WEEK_OF_YEAR, 2),
    MONTHLY(Calendar.MONTH, 1),
    QUARTERLY(Calendar.MONTH, 3);

    private int frequency;
    private int multiplier;

    Frequency(int frequency, int multiplier) {
        this.frequency = frequency;
        this.multiplier = multiplier;
    }

    public int getFrequency() {
        return frequency;
    }

    public int getMultiplier() {
        return multiplier;
    }

}
于 2012-11-02T16:33:29.713 に答える