FIFO

chillerStudent

Bekanntes Mitglied
Hallo.

es geht um bearbeiten von Prozessen nach der Eintrittszeit.
ich habe hier einen Code der ein wenig wie FIFO arbeitet:

Java:
Process x;
if (lastProcess != null) {
      if (lastProcess.getRemainingTime() > 0)
        return lastProcess;
    }

    x = list[0]; //list[]: liste der Prozesse 
    for (i = 1; i < list.length; i++) {
      if (list[i].getEntryTime() < x.getEntryTime()) {
        x = list[i];
      }
    }
    return x;

Wie schaffe ich es, dass die for schleife erst alle Prozesse durchläuft und dann für ein Prozess mit der geringsten Eintrittszeit entscheidet?

Bin sehr dankbar für jede Hilfe!
 

chillerStudent

Bekanntes Mitglied
Ja richtig. Ich kenne die Queue. Aber ich muss eine Methode schreiben, die drei Parameter hat:
(1)eine Liste der Prozesse, die noch bearbeitet werden müssen: list[]
(2)den letzten Prozessor: lastProcessor
(3)eine Liste, in der alle Prozesse drin sind, die schon bearbeitet sind und Prozesse, die irgendwann mal reinkommen: all[]

Diese drei Parameter haben natürlich einge Methoden zur Verfügung:

getRemainingTime()
getEntrytime()
getRequiredtime()
getName()
 
N

nillehammer

Gast
Wenn Du an diesen Stellen:
Java:
 x = list[0]; //list[]: liste der Prozesse 
    for (i = 1; i < list.length; i++) {
      if (list[i].getEntryTime() < x.getEntryTime()) {
        x = list[i];
      }
    }
Die variable 'x' wie einen Array von Process-Instanzen behandelst, würde ich annehmen, dass Du das hier korrigieren solltest:
Java:
Process x; // <-- Das muss ein Array sein, also 
Process[]x;// <-- Und irgendwie muss der auch initialisiert werden
if (lastProcess != null) {
 
N

nillehammer

Gast
Was hälst Du davon, die Processes gleich in der richtigen Reihenfolge zu haben?
Java:
	private static final Comparator<Process> ENTRY_TIME_COPMARATOR = new Comparator<Process>() {

		@Override
		public int compare(Process first, Process second) {
                     // Ich nahm an, dass Du die entry Time als long gespeichert
                     // hast, wegen System.currentMilis()
			Long firstEntryTime = Long.valueOf(first.getEntryTimeMillis());
			Long secondEntryTime = Long.valueOf(second.getEntryTimeMillis());
			
			return firstEntryTime.compareTo(secondEntryTime);
		}
		
	};

...
// list ist kein glücklicher name, weil es ein array und keine java.util.List ist
Arrays.sort(list, ENTRY_TIME_COPMARATOR);

return list[0];
 

chillerStudent

Bekanntes Mitglied
mhh... Danke, dass du dich hier so viel Mühe gibts, aber ich muss schon die Methoden benutzen, die gegegeben sind.
Also die Methode die ich programmiere ist folgende:

Java:
public Process next(Process lastProcess, Process[] list, Process[] all) {
Process x;
if (lastProcess != null) {
      if (lastProcess.getRemainingTime() > 0)
        return lastProcess;
    }
 
    x = list[0]; //list[]: liste der Prozesse 
    for (i = 1; i < list.length; i++) {
      if (list[i].getEntryTime() < x.getEntryTime()) {
        x = list[i];
      }
    }
    return x;
}

Und die Methoden sind gegeben:
Java:
getRemainingTime()
getEntrytime()
getRequiredtime()
getName()
 

Ähnliche Java Themen


Oben