![]() |
Was ist falsch an meiner Liste
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; |
Re: Was ist falsch an meiner Liste
Zitat:
Delphi-Quellcode:
beim destry ist es ähnlich.
while f_points <> 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; Zitat:
Klaus |
Re: Was ist falsch an meiner Liste
hallo
danke für deine Hilfe, er bringt jetzt keinen Fehler mehr, allerdings gibt er bei pointsshow immer nur das zuletzt eingetragene Element aus . Woran könnte das liegen? |
Re: Was ist falsch an meiner Liste
Hallo schuetzejanett,
wenn du einen neuen Punkt einfügst, setzt du root ja immer auf diesen neuen Punkt. |
Re: Was ist falsch an meiner Liste
Hallo ,
habe zwar verstanden was Mr Spock mir sagen wollte weiß allerdings immer noch nicht so recht was ich ändern muss damit ich meine ganzen punkte sehe |
Re: Was ist falsch an meiner Liste
Zitat:
Delphi-Quellcode:
root wird nur dann gesetzt wenn f_points = nil ist, d.h. wenn die Liste leer ist.
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; // hier liegt der Fehler f_points^.next := knot; f_points := knot; f_points^.next := nil; end; end; Oder habe ich da etwas übersehen? @Janett Setzt Du zu Beginn f_points auf nil? Denn eine leere Liste hat nicht zwangsläufig den Wert/die Adresse nil.
Delphi-Quellcode:
Grüße
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; // hier liegt der Fehler f_points^.next := knot; f_points := knot; f_points^.next := nil; f_points^.shot := point; end; end; Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz