FCFS/SJF/HRRF都要考虑一些情况,我一般写完就忘,所以这里就不举例例子了各位看看我的代码及思路,有什么错误麻烦帮我挑一下,我是按老师布置的作业写完的:
题目要求:
输入N(N>0)个作业,输入每个作业的名字,到达时间,服务时间,按照先来先服务算法,计算每个作业的完成时间,周转时间,带权周转时间(保留2位小数)。
输入格式:
第一行输入作业数目,第二行输入作业的名字,第三行输入到达时间,第四行输入服务时间。
输出格式:
按照到达时间从小到大排序,第一行输出作业的名字,第二行输出到达时间,第三行输出服务时间,第四行输出完成时间,第五行输出完成时间,第六行输出带权周转时间。
例子:
5
A B C D E
0 1 2 3 4
4 3 4 2 4
输出:
作 业 名:A B C D E
到达时间:0 1 2 3 4
服务时间:4 3 4 2 4
完成时间:4 7 11 13 17
周转时间:4 6 9 10 13
带权周转时间:1.00 2.00 2.25 5.00 3.25
代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner works=new Scanner(System.in);
int s=Integer.parseInt(works.nextLine());
String Works_name=works.nextLine();
String [] crr=Works_name.split("\\s+");
String Arrival_time=works.nextLine();
String [] arr=Arrival_time.split("\\s+");
int [] brr=new int[arr.length];
for(int i=0;i<arr.length;i++) {
brr[i]=Integer.valueOf(arr[i]);
}
String Service_time=works.nextLine();
String [] drr=Service_time.split("\\s+");
int [] frr=new int [drr.length];
for(int i=0;i<drr.length;i++) {
frr[i]=Integer.valueOf(drr[i]);
}
Job [] job=new Job[s];
for(int i=0;i<crr.length;i++) {
job[i]=new Job(crr[i],brr[i],frr[i],0,0,0.00);
}
Bubble(job);
for(int i=0;i<crr.length;i++) {
if(i==0) {
job[i].finishTime=job[i].arriveName+job[i].needTime;
}
else if(job[i-1].finishTime<job[i].arriveName){
job[i].finishTime=job[i].arriveName+job[i].needTime;
}
else {
job[i].finishTime=job[i-1].finishTime+job[i].needTime;
}
}
for(int i=0;i<crr.length;i++) {
job[i].turnaroundTime=job[i].finishTime-job[i].arriveName;
}
for(int i=0;i<crr.length;i++) {
job[i].turnaroundWithRight=Double.valueOf(job[i].turnaroundTime)/Double.valueOf(job[i].needTime);
}
System.out.printf("作 业 名:");
for(int i=0;i<crr.length;i++) {
job[i].getjobName();
if(i<crr.length-1) {
System.out.printf(" ");
}
}
System.out.printf("\n到达时间:");
for(int i=0;i<crr.length;i++) {
job[i].getarriveName();
if(i<crr.length-1) {
System.out.printf(" ");
}
}
System.out.printf("\n服务时间:");
for(int i=0;i<crr.length;i++) {
job[i].getneedTime();
if(i<crr.length-1) {
System.out.printf(" ");
}
}
System.out.printf("\n完成时间:");
for(int i=0;i<crr.length;i++) {
job[i].getfinishTime();
if(i<crr.length-1) {
System.out.printf(" ");
}
}
System.out.printf("\n周转时间:");
for(int i=0;i<crr.length;i++) {
job[i].getturnaroundTime();
if(i<crr.length-1) {
System.out.printf(" ");
}
}
System.out.printf("\n带权周转时间:");
for(int i=0;i<crr.length;i++) {
job[i].getturnaroundWithRight();
if(i<crr.length-1) {
System.out.printf(" ");
}
}
System.out.println("");
works.close();
}
static void Bubble(Job job[]){
Job temp=new Job("",0,0,0,0,0.00);
boolean flag=false;
for(int i=0;i<job.length-1;i++) {
for(int j=0;j<job.length-1-i;j++) {
if(job[j].arriveName>job[j+1].arriveName) {
flag=true;
temp=job[j];
job[j]=job[j+1];
job[j+1]=temp;
}
}
if(!flag) {
break;
}
else {
flag=false;
}
}
}
}
class Job{
public String jobName;
public int arriveName;
public int needTime;
public int finishTime;
public int turnaroundTime;
public double turnaroundWithRight;
public Job(String jobName,int arriveName,int needTime,int finishTime,int turnaroundTime,double turnaroundWithRight) {
this.jobName=jobName;
this.arriveName=arriveName;
this.needTime=needTime;
this.finishTime=finishTime;
this.turnaroundTime=turnaroundTime;
this.turnaroundWithRight=turnaroundWithRight;
}
public void getjobName() {
System.out.printf("%s",jobName);
}
public void getarriveName() {
System.out.printf("%d",arriveName);
}
public void getneedTime() {
System.out.printf("%d",needTime);
}
public void getfinishTime() {
System.out.printf("%d",finishTime);
}
public void getturnaroundTime() {
System.out.printf("%d",turnaroundTime);
}
public void getturnaroundWithRight() {
System.out.printf("%-3.2f",turnaroundWithRight);
}
}
因为我们老师用的测试程序不允许带包,各位可自行组建包。我用java语言写的,eclipse环境,各位可以试试idea,相对eclipse更好一些