Created
September 10, 2016 16:40
-
-
Save anonymous/79bcb92727db5e167d57b43972ea2005 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* To change this license header, choose License Headers in Project Properties. | |
* To change this template file, choose Tools | Templates | |
* and open the template in the editor. | |
*/ | |
package taskschedule; | |
import java.util.ArrayList; | |
import java.util.List; | |
/** | |
* | |
* @author ChienMao | |
*/ | |
public class TaskSchedule { | |
/** | |
* @param args the command line arguments | |
*/ | |
public static void main(String[] args) { | |
List<Task> listA = new ArrayList<Task>(); | |
List<Task> listB = new ArrayList<Task>(); | |
List<String> listC = new ArrayList<String>(); | |
listA.add(new Task(4, 10, "A1")); | |
listA.add(new Task(4, 10, "A2")); | |
listA.add(new Task(2, 5, "A3")); | |
listB.add(new Task(2, 2, "B1")); | |
listB.add(new Task(2, 20, "B2")); | |
listB.add(new Task(2, 5, "B3")); | |
int timeStampA = 0; | |
int timeStampB = 0; | |
int timeStampAEnd = 0; | |
boolean getTask = true; | |
while(getTask) { | |
getTask = false; | |
for(int i = 0; i < listA.size(); ++i) { | |
if(false == getTask) { | |
if(listA.get(i).isTodo()) { | |
Task ta = listA.get(i); | |
listC.add(ta.getName()); | |
timeStampA = ta.getEndTime() - ta.getDelayTime(); | |
timeStampAEnd = ta.getEndTime(); | |
getTask = true; | |
listA.get(i).setTodo(false); | |
for(int j = 0; j < listB.size(); ++j) { | |
if(listB.get(j).isTodo()) { | |
if(listB.get(j).getBeginTime() <= timeStampA) { | |
listB.get(j).setBeginTime(timeStampA); | |
} | |
} | |
} | |
} | |
} else { | |
listA.get(i).setBeginTime(timeStampAEnd); | |
} | |
} | |
if(false == getTask) { | |
timeStampAEnd = 2147483647; | |
} | |
for(int i = 0; i < listB.size(); ++i) { | |
if(listB.get(i).isTodo()) { | |
if(timeStampB <= listB.get(i).getBeginTime() && | |
timeStampA <= listB.get(i).getBeginTime() && | |
timeStampA + listB.get(i).getExecuteTime() + 4 <= timeStampAEnd) { | |
Task tb = listB.get(i); | |
listC.add(tb.getName()); | |
timeStampB = tb.getEndTime(); | |
timeStampA += listB.get(i).getExecuteTime() + 2; | |
getTask = true; | |
listB.get(i).setTodo(false); | |
for(int j = i + 1; j < listB.size(); ++j) { | |
if(listB.get(j).isTodo()) { | |
listB.get(i).setBeginTime(timeStampA); | |
} | |
} | |
} else { | |
break; | |
} | |
} | |
} | |
for(int i = 0; i < listB.size(); ++i) { | |
if(listB.get(i).isTodo()) { | |
if(listB.get(i).getBeginTime() <= timeStampB) { | |
listB.get(i).setBeginTime(timeStampB); | |
} | |
} | |
} | |
} | |
for(String s : listC) { | |
System.out.print(s + " "); | |
} | |
System.out.println(); | |
} | |
} | |
class Task { | |
private String name; | |
private int beginTime; | |
private int endTime; | |
private int delayTime; | |
private int executeTime; | |
private boolean todo; | |
public Task(int executeTime, int delayTime, String name) { | |
this.name = name; | |
this.executeTime = executeTime; | |
this.delayTime = delayTime; | |
this.beginTime = 0; | |
this.endTime = beginTime + executeTime + delayTime; | |
this.todo = true; | |
} | |
public String getName() { | |
return name; | |
} | |
public void setName(String name) { | |
this.name = name; | |
} | |
public int getBeginTime() { | |
return beginTime; | |
} | |
public void setBeginTime(int beginTime) { | |
this.beginTime = beginTime; | |
this.endTime = this.beginTime + this.executeTime + this.delayTime; | |
} | |
public int getEndTime() { | |
return endTime; | |
} | |
public void setEndTime(int endTime) { | |
this.endTime = endTime; | |
} | |
public int getDelayTime() { | |
return delayTime; | |
} | |
public void setDelayTime(int delayTime) { | |
this.delayTime = delayTime; | |
} | |
public int getExecuteTime() { | |
return executeTime; | |
} | |
public void setExecuteTime(int executeTime) { | |
this.executeTime = executeTime; | |
} | |
public boolean isTodo() { | |
return todo; | |
} | |
public void setTodo(boolean todo) { | |
this.todo = todo; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment