操作系統--先來先服務,短作業優先

先來先服務

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,自行查找和修改

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章