Skip to content

Instantly share code, notes, and snippets.

Created September 10, 2016 16:40
Show Gist options
  • Save anonymous/79bcb92727db5e167d57b43972ea2005 to your computer and use it in GitHub Desktop.
Save anonymous/79bcb92727db5e167d57b43972ea2005 to your computer and use it in GitHub Desktop.
/*
* 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