Java 最短剩余时间算法

Java 最短剩余时间算法,java,arrays,algorithm,process,scheduled-tasks,Java,Arrays,Algorithm,Process,Scheduled Tasks,我将此数组按突发时间排序,具体取决于到达时间: Process Burst Arrival 1 10 0 2 5 1 3 2 2 我想在这里完成的是让一个数组中的所有有序数组按如下顺序排列: Array Shortest remaining time algorithm Process Burst 1 1 2 1 3 2 2

我将此数组按突发时间排序,具体取决于到达时间:

Process   Burst  Arrival 
1           10       0  
2           5       1  
3           2       2  
我想在这里完成的是让一个数组中的所有有序数组按如下顺序排列:

Array Shortest remaining time algorithm

Process   Burst
1         1
2         1
3         2
2         4
1         9

P2到达P1的时间还需要9毫秒才能完成。由于B的cpu在5毫秒<9毫秒内突发,因此P1的执行将被抢占,P2将被执行,但随着P3的到来,P2的执行需要3毫秒,而P3只需要2毫秒执行,因此P3将接管P2,依此类推

这是我的fcfs代码:

    int[] startTime = new int[myArr.length];
    int[] CompletionTime = new int[myArr.length];
    int[] wait = new int[myArr.length];
    int[] turnaround = new int[myArr.length];
    int[] idl = new int[myArr.length];


    for(int v=0; v<Metd.length; v++){

        if(Metd[v].contains("FCFS")){





            System.out.println("--------------------------------------First Come First Served--------------------------------------"); 
             System.out.println();

            Arrays.sort(myArr, new Comparator<int[]>() {
                public int compare(int[] o1, int[] o2) {
                    return Integer.compare(o1[2], o2[2]);
                }
            });

            System.out.println("____Process_____");
            System.out.println("P   "+"B  "+"A  ");
            for(int t=0; t<myArr.length; t++){


                System.out.println(myArr[t][0]+"  "+myArr[t][1]+"  "+myArr[t][2]+"  ");
            }

            //System.out.println("After "+Arrays.deepToString(myArr));  

            int y=0;
            int num1=0;

            int diff=0;
            for(int j=0; j<myArr.length; j++){

                y=myArr[j][1];
                num1=myArr[j][0];



                 if(j>0 && myArr[j-1][1]< myArr[j][2] && counter<myArr[j][2]){
                        //startTime[j+1]=y;
                        diff= myArr[j][2]- counter;
                        //System.out.println("Differencia :"+diff);
                        idl[j]=diff;

                        Thread r= new Thread(new Idle("System Idle for: "+diff, diff));
                         r.start();
                         counter=counter+diff;
                         //System.out.println("counter :"+counter);
                    }           

                 startTime[j]=counter;
                Thread t = new Thread(new Process("Process "+num1, y));
                 t.start();
                 counter=counter+y;
                 CompletionTime[j]=counter;

                try {

                t.join(); // Wait for it to finish.


            } catch (InterruptedException e) {

                e.printStackTrace();
            }

            }





    for(int k=0; k<startTime.length; k++){
        int waitdiff=startTime[k]-myArr[k][2];  //Wait = Start Time – Arrival Time
        wait[k]=waitdiff;

        int turndiff=CompletionTime[k]-myArr[k][2];
        turnaround[k]=turndiff;
    }


    double avewait=0;
    double aveTurn=0;
    double sumidl=0;

    System.out.println("________________________________________Performance Metrics_______________________________________________");
    System.out.println("Process         Start           Completion      Wait            Turnaround");

    for(int q=0; q<startTime.length; q++){

        System.out.println("P"+myArr[q][0]+"            "+startTime[q]+"            "+CompletionTime[q]+"           "+wait[q]+"         "+turnaround[q]+"");


    avewait=avewait+wait[q];
    aveTurn=aveTurn+turnaround[q];
    sumidl=sumidl+idl[q];

    }
    double value= counter/(counter+sumidl);
    System.out.println();
    System.out.println("Average Wait Time : "+avewait/myArr.length);
    System.out.println("Average Turnaround Time : "+aveTurn/myArr.length);
    System.out.println("CPU Utilization : "+df.format(value)+"%");

    System.out.println("-----------------------------------------------------------------------------------------------"); 

    Arrays.fill( startTime, 0 );
    Arrays.fill( CompletionTime, 0 );
    Arrays.fill( wait, 0 );
    Arrays.fill( turnaround, 0 );
    counter=0;

此算法也称为SRTF,您可以从以下链接下载源代码:

我无法理解输出与输入之间的关系。请用文字描述从输入到输出的算法。我也找不到真正的问题。有什么问题吗?错误的结果?