Hallo,
habe das Problem mit den dynamischen Arrays und der Größenänderung noch mal überdacht und wollte es deswegen mit einer einfach verketteten Liste probieren.
Könnt ihr mal gucken ob das so stimmt.
Beim eintragen merke ich zwar keine Fehler weiß allerdings nicht ob das alles so richtig ist oder ob er die Werte wieder überschreibt und bei der ausgabe(erstellt zur Zeit nur nen String der die Werte enthält zu Testzwecken) also show Methode knallts beim Aufruf.
Was mache ich falsch und sollte ich ändern? Ist der Destruktor so richtig ?
Delphi-Quellcode:
// die Definition der Liste
Type TShot = Array[0..2] of String;
TLPoints = ^TPoints;
TPoints = Record
shot : TShot;
next : TLPoints
end;
//die eigenschaaften/ felder der klasse
type TPlayer = class(TObject)
private
f_name :String;
f_stand: integer;
f_finished: boolean;
f_place: integer;
f_points : tLPoints;
f_fields : tAFields;
root : tLPoints;
//die Methoden zum hinzufügen und ausgeben
procedure pointsAdd(point : Tshot);
procedure pointsShow(var s :String);
procedure TPlayer.pointsAdd(point: Tshot);
var
knot : TLPoints;
begin
if f_points = nil then
begin
New(root);
f_points := root;
f_points^.shot := point;
f_points^.next := nil;
end
else
begin
new(knot);
f_points^.shot := point;
f_points^.next := knot;
f_points := knot;
f_points^.next := nil;
end;
end;
procedure TPlayer.pointsShow(var s :String);
var
i,j : integer;
begin
f_points := root;
i := 1;
s := inttostr(i) + '. ter Wurf: ';
while f_points.next^.next <> nil do
begin
for j := 0 to 3 do
s:= s+ f_points^.shot[j] + ' ';
f_points := f_points^.next;
end;
s := s+#13#10;
end;
//der Destruktor
destructor TPlayer.Destroy;
begin
setlength(f_fields, 0);
f_points := root;
while f_points^.next <> NIL do
begin
Root := f_points;
f_points := Root^.Next;
Dispose(Root);
end;
Dispose(F_points);
inherited Destroy;
end;