最短作业优先算法

    技术2022-05-11  50

    public class Job { private String name = ""; private String inTime = ""; private int maybeRunTime = 0; private int waitTime = 0; private int turnoverTime = 0; private int withPoweroverTime = 0; public int getTurnoverTime() {  return turnoverTime; } public void setTurnoverTime(int turnoverTime) {  this.turnoverTime = turnoverTime; } public int getWithPoweroverTime() {  return withPoweroverTime; } public void setWithPoweroverTime(int withPoweroverTime) {  this.withPoweroverTime = withPoweroverTime; } public String getInTime() {  return inTime; } public void setInTime(String inTime) {  this.inTime = inTime; } public int getMaybeRunTime() {  return maybeRunTime; } public void setMaybeRunTime(int maybeRunTime) {  this.maybeRunTime = maybeRunTime; } public String getName() {  return name; } public void setName(String name) {  this.name = name; } public int getWaitTime() {  return waitTime; } public void setWaitTime(int waitTime) {  this.waitTime = waitTime; } }/import java.io.BufferedReader;import java.io.FileReader;import java.util.StringTokenizer;import java.util.Vector;

    public class Operating { public static String dealTime(String time, int parMinutes) {  StringTokenizer tokenizer = new StringTokenizer(time,":");  String hour = tokenizer.nextToken();  String minute = tokenizer.nextToken();  int intHour = Integer.parseInt(hour);  int intMinute = Integer.parseInt(minute);  if((intMinute + parMinutes) < 60) {   intMinute = intMinute + parMinutes;  }else {   intHour = (int)(intMinute + parMinutes)/60 + intHour;   intMinute = (intMinute + parMinutes)`;  }  if(intMinute < 10)   return intHour+":0"+intMinute;  else    return intHour+":"+intMinute; } public static boolean compareTime(String time1,String time2) {    StringTokenizer tokenizer1 = new StringTokenizer(time1,":");  String hour1 = tokenizer1.nextToken();  String minute1 = tokenizer1.nextToken();  int intHour1 = Integer.parseInt(hour1);  int intMinute1 = Integer.parseInt(minute1);    StringTokenizer tokenizer2 = new StringTokenizer(time2,":");  String hour2 = tokenizer2.nextToken();  String minute2 = tokenizer2.nextToken();  int intHour2 = Integer.parseInt(hour2);  int intMinute2 = Integer.parseInt(minute2);    if(intHour1 > intHour2) {   return true;  }else if (intHour1 == intHour2) {   if(intMinute1 > intMinute2) {    return true;   }  }  return false; } public static void main(String[] args) throws Exception {  int sumOverturn = 0;  float sumWithPower = 0;  int jobNum = 0;  BufferedReader fromFile = new BufferedReader(new FileReader("in.txt"));  Vector<Job> jobs = new Vector<Job>();    String jobInLine;  while((jobInLine = fromFile.readLine()) !=null) {   Job job = new Job();   StringTokenizer  strTokenizer = new StringTokenizer(jobInLine);   job.setName(strTokenizer.nextToken());   job.setInTime(strTokenizer.nextToken());   job.setMaybeRunTime(Integer.parseInt(strTokenizer.nextToken()));   jobs.addElement(job);  }    System.out.println("作业名称 " + "/t进入 " + "/t开始" + "/t结束 " + "/t周转时间 " + "/t带权周转时间 ");  while(!jobs.isEmpty()) {   Job toDealJob = new Job();   int k = 0;   for (int i = 0,j = 0;i < jobs.size();) {    i = 0;    j = 0;    k = 0;    toDealJob = jobs.elementAt(i);        for (j = i + 1;j < jobs.size(); j++) {     String jInTime = jobs.elementAt(j).getInTime();     String nowTime = Operating.dealTime(toDealJob.getInTime(),toDealJob.getWaitTime());               if((jobs.elementAt(j).getMaybeRunTime() < toDealJob.getMaybeRunTime())       && (Operating.compareTime(jInTime, nowTime))) {       toDealJob = jobs.elementAt(j);       k = j;     }    }    String startTime = Operating.dealTime(toDealJob.getInTime(), toDealJob.getWaitTime());        toDealJob = jobs.elementAt(k);    int overturn = toDealJob.getWaitTime() + toDealJob.getMaybeRunTime();    float withPower = overturn/toDealJob.getMaybeRunTime();    String endTime = Operating.dealTime(toDealJob.getInTime(), overturn);    System.out.println(toDealJob.getName() + "/t" //作业名称         + toDealJob.getInTime()+ "/t" //进入         + startTime +  "/t" //开始         + endTime + "/t"//结束         + overturn + "/t"         + withPower);    sumOverturn = sumOverturn + overturn;    sumWithPower = sumWithPower + withPower;    jobNum++;        for(int t = 0;t < jobs.size();t++) {     jobs.elementAt(t).setWaitTime(jobs.elementAt(t).getWaitTime() + toDealJob.getMaybeRunTime());    }    jobs.remove(k);   }  }  System.out.println();  float averageOverturn = sumOverturn/jobNum;  float averageWithPower = sumWithPower/jobNum;  System.out.println("平均周转时间为 :" + averageOverturn + " 分钟");  System.out.println("平均带权周转时间为 :" + averageWithPower + " 分钟"); }}/in.txt的内容:Job1 12:00 30Job2 12:30 40Job3 12:40 30Job4 13:00 30Job5 13:50 50Job6 14:00 30Job7 14:40 30Job8 15:01 30


    最新回复(0)