Как я могу найти наименьшее значение в массиве, который находится внутри объекта внутри ArrayList? Значение объединяется с другими символами - PullRequest
0 голосов
/ 14 февраля 2020

Я программирую планировщик ЦП для SJF в Java. У меня есть ArrayList, который содержит объекты работы. Каждое задание состоит из идентификатора программы и массива пакетов процессора и т. Д. c. Как найти наименьшее значение среди всех заданий, которое выбирается из самого низкого индекса каждого массива?


Хорошо, я постараюсь быть более ясным. Вот код, который я использую для создания заданий и одновременного добавления их в ArrayList.

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

Допустим, у меня есть 3 объекта PCB в ArrayList jobQueue. Мне нужно запустить пакеты процессора в том порядке, в котором они появляются в массиве, но наименьшее значение в самом низком индексе должно выполняться первым. Я чувствую, что это все еще не ясно, поэтому я попробую картинку.

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

Эти задания должны go к ЦПУ, для любого временного интервала, который был введен, а затем вернулся к задание Порядок, в котором они go для ЦП, должен быть определен по наименьшему значению с индексом 0 для любой из печатных плат. В этом случае мне нужно найти наименьшее из 4, 5 или 3.

Скажем, временной интервал равен 3. PCB-3 идет в ЦП, использует его пакет, затем возвращается в jobQueue. Опять же, мне нужно найти самое низкое значение для отправки в ЦП, но сейчас я смотрю на 4, 5 и 8.

Надеюсь, это имеет больше смысла.

1 Ответ

0 голосов
/ 14 февраля 2020

Объявите массив для хранения всех самых низких значений из каждого массива CPU Burst из каждого задания. Инициализируйте размер этого массива в соответствии с количеством доступных заданий (размер 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);
}

Теперь у вас есть ArrayList с именем jobsList , который содержит 10 Job объектов. Каждый объект Job содержит целочисленную переменную с именем programID (которая содержит уникальный идентификационный номер программы) и целочисленный массив с именем cpuBursts , который содержит 15 random пакетных значений от 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...