操作系统 sjf pta (java版)

该程序实现了短作业优先(Shortest Job First, SJF)调度算法,用于作业调度。用户可以输入作业的数量、作业的到达时间和服务时间,程序会根据到达时间和服务时间对作业进行排序,并计算完成时间、周转时间和带权周转时间。最后,程序会输出所有作业的相关信息。
摘要由CSDN通过智能技术生成

提交的话,需要将sjf改为Main,package去掉 

package pta;
import java.util.*;
class Work{
		String workName;        //workName用来记录作业名
		float finishTime;		//finishTime记录作业完成时间
		float arriveTime;		//arriveTime记录作业到达时间
		float turnAroundTime;	//turnAroundTime记录作业周转时间
		float daiTime;			//daiTime记录作业带权周转时间
		float serviceTime;      //serviceTime记录作业服务时间
}
public class sjf{ 
	public static void main(String[] args) {
		Work example=new Work();				   //example用来交换work
		//System.out.println("请输入作业数量:");
		Scanner reader= new Scanner(System.in);
		int numb = reader.nextInt();               //numb记录作业数量
		Work[] work=new Work[numb];
		//System.out.println("请输入作业名:");
		for(int i=0;i<numb;i++) {					//输入作业名
			work[i]=new Work();
			work[i].workName=reader.next();
		}
		
		//System.out.println("请输入作业到达时间:");
		for(int i=0;i<numb;i++) {					//输入作业到达时间
			
			work[i].arriveTime=reader.nextFloat();
		}
		
		//System.out.println("请输入作业服务时间:");
		for(int i=0;i<numb;i++) {					//输入作业服务时间
			work[i].serviceTime=reader.nextFloat();
		}
		
		//System.out.println("完成输出");
		
		
		for(int i=0;i<numb-1;i++) {                 //根据到达时间排序第一次
			for(int j=i+1;j<numb;j++) {
				if(work[i].arriveTime>work[j].arriveTime) {
					example=work[j];
					work[j]=work[i];
					work[i]=example;
				}
			}
		}
		
		for(int i=0;i<numb-1;i++) {                    //在相同的到达时间内再按服务时间排序,确定第一个运行的作业
			for(int j=i+1;j<numb;j++) {
				if(work[i].arriveTime==work[j].arriveTime) {
					if(work[i].serviceTime>work[j].serviceTime) {
						example=work[j];
						work[j]=work[i];
						work[i]=example;
					}
				}
			}
		}
		
		for(int i=0;i<numb;i++) {
			if(i==0) {
					work[i].finishTime=work[i].arriveTime+work[i].serviceTime;
			}
			else { 
				for(int j=i;j<numb;j++) {
					if(work[i-1].finishTime>=work[j].arriveTime){
						if(work[i].serviceTime>work[j].serviceTime) {
							example=work[j];
							work[j]=work[i];
							work[i]=example;				
						}
						work[i].finishTime=work[i].serviceTime+work[i-1].finishTime;
						
					}
					else if(work[i-1].finishTime<work[i].arriveTime){
						work[i].finishTime=work[i].arriveTime+work[i].serviceTime;
						break;
					} 
				}
			}
			work[i].turnAroundTime=work[i].finishTime-work[i].arriveTime;
			work[i].daiTime=work[i].turnAroundTime/work[i].serviceTime;
		}
		

		for(int i=0;i<numb-1;i++) {                 //根据到达时间排序第二次
			for(int j=i+1;j<numb;j++) {
				if(work[i].arriveTime>work[j].arriveTime) {
					example=work[j];
					work[j]=work[i];
					work[i]=example;
				}
			}
		}
			
		System.out.printf("作 业 名:");			//输出作业名
		for(int i=0;i<numb;i++) {		
				if(i<numb-1){
					System.out.printf("%s ",work[i].workName);
				}
				else {
					System.out.printf("%s",work[i].workName);
				}
		}
		
		System.out.printf("\n到达时间:");		//输出到达时间
		for(int i=0;i<numb;i++) {					
			if(i<numb-1){
				System.out.printf("%.0f ",work[i].arriveTime);
			}
			else {
				System.out.printf("%.0f",work[i].arriveTime);
			}
		}
		
		System.out.printf("\n服务时间:");		//输出服务时间
		for(int i=0;i<numb;i++) {					
			if(i<numb-1){
				System.out.printf("%.0f ",work[i].serviceTime);
			}
			else {
				System.out.printf("%.0f",work[i].serviceTime);
			}
		}
		
		System.out.printf("\n完成时间:");		//输出完成时间
		for(int i=0;i<numb;i++) {					
			if(i<numb-1){
				System.out.printf("%.0f ",work[i].finishTime);
			}
			else {
				System.out.printf("%.0f",work[i].finishTime);
			}
		}
		
		System.out.printf("\n周转时间:");		//输出周转时间
		for(int i=0;i<numb;i++) {					
			if(i<numb-1){
				System.out.printf("%.0f ",work[i].turnAroundTime);
			}
			else {
				System.out.printf("%.0f",work[i].turnAroundTime);
			}
		}
		
		System.out.printf("\n带权周转时间:");   //输出带权周转时间
		for(int i=0;i<numb;i++) {					
			if(i<numb-1){
				System.out.printf("%.2f ",work[i].daiTime);
			}
			else {
				System.out.printf("%.2f",work[i].daiTime);
			}
		}
	}
}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祈绘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值