7-1 作业调度算法--先来先服务 (100 分)(FCFS)

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更好一些

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值