Einzelnen Beitrag anzeigen

schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#58

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 17:46
In ButtonClick ist nichts doppelt.

Doppelt gemoppelt ist eher das hier:

Delphi-Quellcode:
function tschlange.einfuegen(x: person):boolean;
begin
  //hinter dem Array kann man nichts mehr einfügen
  Result := Next >0;
  x.Name:= form1.edit1.text; // ERWITERUNG
  x.id := strtoint(form1.edit2.text); // ERWEITERUNG
  if Result then
    begin

      //Daten an aktuelle Array-Position schreiben
      schlange[Next].Name := x.Name;
      schlange[Next].Id := x.id;
      //Position abziehen
      dec(Next);

    schlange[next].Name:=x.name;
    schlange[next].id := x.id;

    end;
end
nämlich das 2. Mal Schlange[next].name und Schlange[next].id.

Warum?

Weil die Zuweisung bereits bei "Daten an aktuelle Position schreiben" erfolgt. Die 2. Zuweisung darunter erfolgt nicht nur unnötig doppelt, sondern zu allem Überfluss noch nach der Dekrementierung des Index Next. So steht dann der Name mit gleicher ID zwei Mal in der Schlange. Hintereinander. Das geht logisch nicht, ist Fehler, weil eine Person nur einmal in der Schlange stehen kann. Diese kann maximal zu einem späteren Zeitpunkt NACHDEM sie an der Kasse schon bezahlt hat, nochmals kommen.

Denn der Name der Person hat sich zwischenzeitlich im Code vor der 2. Zuweisung noch nicht geändert, ist also mit Sicherheit noch dieselbe Person.
.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat