输入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.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int number = s.nextInt();
//输入名字
String[] name = new String[number];
for (int i = 0; i < name.length; i++) {
name[i] = s.next();
}
//输入到达时间
int[] arriveTime = new int[number];
for (int i = 0; i < name.length; i++) {
arriveTime[i] = s.nextInt();
}
//输入服务时间
int[] serivceTime = new int[number];
for (int i = 0; i < name.length; i++) {
serivceTime[i] = s.nextInt();
}
//有几个作业就创建几个对象
Work[] work = new Work[number];
for (int i = 0; i < number; i++) {
work[i] = new Work();
work[i].name1 = name[i];
work[i].arriveTime = arriveTime[i];
work[i].seriviceTime = serivceTime[i];
}
Arrays.sort(work);//到达时间排序
System.out.print("作 业 名:");
//输出名字
for (int i = 0; i < number; i++) {
if(i == number-1){
System.out.print(work[i].name1);
break;
}
System.out.print(work[i].name1 + " ");
}
System.out.println();
System.out.print("到达时间:");//输出到达时间
for (int i = 0; i < number; i++) {
if(i == number-1){
System.out.print(work[i].arriveTime);
break;
}
System.out.print(work[i].arriveTime + " ");
}
System.out.println();
System.out.print("服务时间:");//输出服务时间
for (int i = 0; i < number; i++) {
if(i == number-1){
System.out.print(work[i].seriviceTime);
break;
}
System.out.print(work[i].seriviceTime + " ");
}
System.out.println();
//计算完成时间
for (int i = 0; i < number; i++) {
if (i == 0) {
work[i].finishTime = work[0].arriveTime + work[0].seriviceTime;
} else {
if (work[i].arriveTime > work[i - 1].finishTime) {
work[i].finishTime = work[i].arriveTime + work[i].seriviceTime;
} else {
work[i].finishTime = work[i - 1].finishTime + work[i].seriviceTime;
}
}
}
System.out.print("完成时间:");//输出
for (int i = 0; i < number; i++) {
if(i == number-1){
System.out.print(work[i].finishTime);
break;
}
System.out.print(work[i].finishTime + " ");
}
System.out.println();
System.out.print("周转时间:");//输出周转时间
for (int i = 0; i < number; i++) {
work[i].turnAroundTime = work[i].finishTime - work[i].arriveTime;
//周转时间=完成时间-到达时间
if(i == number-1){
System.out.print(work[i].turnAroundTime);
break;
}
System.out.print( work[i].turnAroundTime + " ");
}
System.out.println();
System.out.print("带权周转时间:");
for (int i = 0; i < number; i++) {
work[i].turnAroundTimeQ =1.00 * work[i].turnAroundTime / work[i].seriviceTime;
//带权周转时间=周转时间/服务时间
if(i == number-1){
System.out.printf("%.2f",work[i].turnAroundTimeQ);
break;
}
System.out.printf("%.2f ",work[i].turnAroundTimeQ);
}
System.out.println();
}
}
class Work implements Comparable{
String name1;//名字
int arriveTime;//到达时间
int seriviceTime;//服务时间
int finishTime;//完成时间
int turnAroundTime;//周转时间
double turnAroundTimeQ;//带权周转时间
public Work() {
}
public Work(String name1, int arriveTime, int seriviceTime) {
this.name1 = name1;
this.arriveTime = arriveTime;
this.seriviceTime = seriviceTime;
}
//达到时间要进行排序
public int compareTo(Object o) {
if (o instanceof Work) {
Work p = (Work) o;
return (this.arriveTime - p.arriveTime);
}
throw new IllegalArgumentException("非法参数,o=" + o);
}
}