先來先服務
import java.text.DecimalFormat;
import java.util.Scanner;
public class bank { //先到先服務
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
DecimalFormat df = new DecimalFormat("######0.0"); //保留兩位小數
//System.out.println("作業 到達時間 服務時間 開始時間 完成時間 週轉時間 帶權週轉時間");
System.out.print("請輸入進程個數:");
int num=input.nextInt();
double[] get=new double[num]; //建立作業到達時間數組
double[] run=new double[num]; //建立作業服務時間到達數組
double[] begin=new double[num]; //建立開始時間數組
double[] ok=new double[num]; //建立完成時間數組
double[] zz=new double[num]; //建立週轉時間數組
double[] time=new double[num]; //建立帶全週轉時間數組
double[] aa=new double[num]; //建立作業時間大小比較,將作業號存入
int[] bb=new int[num]; //存儲作業號
double cc;
int zy;
for (int i=1;i<=num;i++){
System.out.print("請輸入第"+i+"個作業的到達時間:");
get[i-1]=input.nextDouble(); //講到達時間放入數組
System.out.print("請輸入第"+i+"個作業的服務時間:");
run[i-1]=input.nextDouble(); //將服務時間放入數組
}
/*------------到達時間,服務時間存入數組,完成數據的初始化-------------------*/
for (int i=1;i<=num;i++){
aa[i-1]=get[i-1];
}
for (int i=1;i<=num;i++){
if (i==1){
begin[i-1]=get[i-1]; //對開始時間進行復制
ok[i-1]=begin[i-1]+run[i-1]; //對完成時間進行賦值
zz[i-1]=ok[i-1]-get[i-1]; //週轉時間賦值
time[i-1]=zz[i-1]/run[i-1]; //平均週轉時間
}
else{
for (int j=1;j<num-1;j++){ //對到達作業時間進行排序
for (int k=j+1;k<num;k++)
if (aa[j]>aa[k]){
cc=aa[j];
aa[j]=aa[k];
aa[k]=cc;
}
}
for (int m=1;m<num;m++){ //獲取到到達時間比較後的作業號
for (int n=1;n<num;n++){
if (aa[m]==get[n]){
bb[m-1]=n;
}
}
}
if (i==2){ //第二個作業是以第一個作業爲基礎進行更改
zy=bb[i-2];
begin[zy]=ok[0];
ok[zy]=begin[zy]+run[zy];
zz[zy]=ok[zy]-get[zy];
time[zy]=zz[zy]/run[zy];
}
else{ //第三個作業及以後,以前一個到達時間短的作業爲基礎更改
zy=bb[i-2];
begin[zy]=ok[(bb[i-2-1])];
ok[zy]=begin[zy]+run[zy];
zz[zy]=ok[zy]-get[zy];
time[zy]=zz[zy]/run[zy];
}
}
}
System.out.println("作業 到達時間 服務時間 開始時間 完成時間 週轉時間 帶權週轉時間");
for (int i=1;i<=num;i++){
System.out.println(i+" "+df.format(get[i-1])+" "+df.format(run[i-1])+" "+df.format(begin[i-1])+" "+df.format(ok[i-1])+" "+df.format(zz[i-1])+" "+df.format(time[i-1])+" ");
}
}
}
短作業優先
import java.text.DecimalFormat;
import java.util.Scanner;
public class first { //短作業優先
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
DecimalFormat df = new DecimalFormat("######0.0"); //保留兩位小數
//System.out.println("作業 到達時間 服務時間 開始時間 完成時間 週轉時間 帶權週轉時間");
System.out.print("請輸入進程個數:");
int num=input.nextInt();
double[] get=new double[num]; //建立作業到達時間數組
double[] run=new double[num]; //建立作業服務時間到達數組
double[] begin=new double[num]; //建立開始時間數組
double[] ok=new double[num]; //建立完成時間數組
double[] zz=new double[num]; //建立週轉時間數組
double[] time=new double[num]; //建立帶全週轉時間數組
double[] aa=new double[num]; //服務時間大小比較,將作業號存入
int[] bb=new int[num]; //存儲作業號
double cc;
int zy;
for (int i=1;i<=num;i++){
System.out.print("請輸入第"+i+"個作業的到達時間:");
get[i-1]=input.nextDouble(); //講到達時間放入數組
System.out.print("請輸入第"+i+"個作業的服務時間:");
run[i-1]=input.nextDouble(); //將服務時間放入數組
}
/*------------到達時間,服務時間存入數組,完成數據的初始化-------------------*/
for (int i=1;i<=num;i++){
aa[i-1]=run[i-1];
}
for(int i=1;i<=num;i++){
if (i==1){
begin[i-1]=get[i-1]; //對開始時間進行復制
ok[i-1]=begin[i-1]+run[i-1]; //對完成時間進行賦值
zz[i-1]=ok[i-1]-get[i-1]; //週轉時間賦值
time[i-1]=zz[i-1]/run[i-1]; //平均週轉時間
}
else{
for (int j=1;j<num-1;j++){ //對服務時間進行排序
for (int k=j+1;k<num;k++)
if (aa[j]>aa[k]){
cc=aa[j];
aa[j]=aa[k];
aa[k]=cc;
}
}
for (int m=1;m<num;m++){ //獲取到服務時間比較後的作業號
for (int n=1;n<num;n++){
if (aa[m]==run[n]){
bb[m-1]=n;
}
}
}
if (i==2){ //第二個作業是以第一個作業爲基礎進行更改
zy=bb[i-2];
begin[zy]=ok[0];
ok[zy]=begin[zy]+run[zy];
zz[zy]=ok[zy]-get[zy];
time[zy]=zz[zy]/run[zy];
}
else{ //第三個作業及以後,以前一個服務短的作業爲基礎更改
zy=bb[i-2];
begin[zy]=ok[(bb[i-2-1])];
ok[zy]=begin[zy]+run[zy];
zz[zy]=ok[zy]-get[zy];
time[zy]=zz[zy]/run[zy];
}
}
}
System.out.println("作業 到達時間 服務時間 開始時間 完成時間 週轉時間 帶權週轉時間");
for (int i=1;i<=num;i++){
System.out.println(i+" "+df.format(get[i-1])+" "+df.format(run[i-1])+" "+df.format(begin[i-1])+" "+df.format(ok[i-1])+" "+df.format(zz[i-1])+" "+df.format(time[i-1])+" ");
}
}
}
可能存在一些bug,自行查找和修改