如何在ArrayList内的对象内的数组中找到最小值?该值与其他字符串联

2020-02-14 java arrays arraylist indexing

我正在用Java为SJF编写CPU调度程序。我有一个包含作业对象的ArrayList。每个作业都包含一个程序ID和一个CPU突发数组等。在所有作业中,如何从每个数组的最低索引中进行选择,才能找到最小值?


好吧,我会尝试更加清楚。这是我用来创建作业并将它们同时添加到ArrayList的代码。

//add PCB objects to the jobQueue ArrayList. listOfBursts is an array.
 jobQueue.add(new PCB(processID, listOfCPUBursts));

假设我在jobQueue ArrayList中有3个PCB对象。 我需要按照它们在数组中出现的顺序运行CPU突发,但是最低索引中的最小值必须首先运行。我觉得这还不清楚,所以我尝试一张照片。

          PCB-1's array = {4, 7, 2, 3}
          PCB-2's array = {5, 2, 1, 3}
          PCB-3's array = {3, 8, 4, 2}

无论输入了什么时间段,这些作业都需要进入CPU,然后再返回到jobQueue。它们进入CPU的顺序需要由任何PCB的索引0处的最小值确定。在这种情况下,我需要找到最低的4、5或3。

假设时间片为3。PCB-3进入CPU,用光了它的突发脉冲然后返回到jobQueue。同样,我需要找到要发送给CPU的最小值,但是现在我正在查看4、5和8。

我希望这更有意义。

Answers

声明一个数组,以存储每个作业中每个CPU突发数组中的所有最小值。将此阵列的大小初始化为可用的作业数(ArrayList大小)。

遍历ArrayList以获得存储在其中的每个Job对象。 从每个作业中获取“ CPU突发阵列”并按升序对其进行排序。这会将最小值带到每个数组的开头。在索引0处获取值,并将其存储在您先前声明的数组中。

现在,您有了一个所有最低值的数组。

这是一些示例代码:

职位类别:

public class Job {

    private int programID;
    private int[] cpuBursts;

    public Job() {}

    public Job (int programid,  int[] cpubursts) {
        this.programID = programid;
        this.cpuBursts = cpubursts;
    }

    public int getProgramID() {
        return programID;
    }

    public void setProgramID(int programID) {
        this.programID = programID;
    }

    public int[] getCpuBursts() {
        return cpuBursts;
    }

    public void setCpuBursts(int[] cpuBursts) {
        this.cpuBursts = cpuBursts;
    }
}

填写作业和ArrayList:

ArrayList<Job> jobsList = new ArrayList<>();
Job job;

// Fill jobsList ArrayList with 10 different job objects...
Random randomGenerator = new Random();
for (int i = 0; i < 10; i++) {
    // Create a new Program ID
    int id = 2230 + (i + 1);

    // Fill a CPU Burst array with 15 random integer values...
    int[] bursts = new int[15];
    for (int j = 0; j < 15; j++) {
        int randomBurst = randomGenerator.nextInt(100) + 1;
        bursts[j] = randomBurst;
    }

    // declare a job object
    job = new Job(id, bursts);

    // Add the job to the Jobs List
    jobsList.add(job);
}

现在,您有一个名为JobsList的ArrayList,其中包含10个Job对象。每个Job对象都包含一个名为programID的整数变量(其中包含唯一的程序ID号)和一个名为cpuBursts的整数数组,其中包含15个从1到100的随机突发值。

现在,要从每个作业中获得最低的突发值:

/* From the 10 Job objects stored within the ArrayList,
   display the all the jobs and at the end, display the
   lowest burst detected in each Job cpuBurst array.  */
int[] lowestBursts = new int[jobsList.size()];  // To hold the lowest bursts.

// Iterate through the Jobs within the ArrayList...
for (int i = 0; i < jobsList.size(); i++) {
    // Display information about the Job...
    System.out.println("Job #" + (i + 1) + ":");
    System.out.println("Program ID: --> " + jobsList.get(i).getProgramID());
    System.out.println("CPU Bursts: --> " + Arrays.toString(jobsList.get(i).getCpuBursts()));
    System.out.println();

    // Sort the cpuBurst array in ascending order.
    Arrays.sort(jobsList.get(i).getCpuBursts());

    // Grab the first burst within the array, it will be the lowest.
    lowestBursts[i] = jobsList.get(i).getCpuBursts()[0];
}

// Now, Display all the lowest bursts from each array..
System.out.println("Lowest Burst In Each Job:");
System.out.println(Arrays.toString(lowestBursts));

Related