AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Was ist falsch an meiner Liste

Offene Frage von "schuetzejanett"
Ein Thema von schuetzejanett · begonnen am 10. Jan 2007 · letzter Beitrag vom 12. Jan 2007
Antwort Antwort
schuetzejanett

Registriert seit: 5. Apr 2006
Ort: Fraureuth
62 Beiträge
 
#1

Was ist falsch an meiner Liste

  Alt 10. Jan 2007, 22:51
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;
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Was ist falsch an meiner Liste

  Alt 11. Jan 2007, 06:41
Zitat:
Delphi-Quellcode:
 while f_points.next^.next <> nil do // und hier fragst Du am Ender der liste nach nil.next^.next da knallt es dann.
  begin
    for j := 0 to 3 do
    s:= s+ f_points^.shot[j] + ' ';
    f_points := f_points^.next; // beim leztzten Element weißt Du hier f_points nil zu
  end;
  s := s+#13#10;
end;
Delphi-Quellcode:
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;
beim destry ist es ähnlich.
Zitat:
Delphi-Quellcode:
f_points := root;
while f_points^.next <> NIL do // hier bleibt immer ein Element übrig, denn wenn f_points^.next = nil
                               // ist gibt es noch ein f_points Element
                               // besse while f_points <> nil, denn wenn F-points nil ist, ist die Liste leer
  begin
    Root := f_points;
    f_points := Root^.Next;
    Dispose(Root);
  end;
Dispose(F_points);
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
schuetzejanett

Registriert seit: 5. Apr 2006
Ort: Fraureuth
62 Beiträge
 
#3

Re: Was ist falsch an meiner Liste

  Alt 12. Jan 2007, 07:12
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?
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Was ist falsch an meiner Liste

  Alt 12. Jan 2007, 07:31
Hallo schuetzejanett,

wenn du einen neuen Punkt einfügst, setzt du root ja immer auf diesen neuen Punkt.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
schuetzejanett

Registriert seit: 5. Apr 2006
Ort: Fraureuth
62 Beiträge
 
#5

Re: Was ist falsch an meiner Liste

  Alt 12. Jan 2007, 08:14
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Was ist falsch an meiner Liste

  Alt 12. Jan 2007, 08:16
Zitat von MrSpock:
Hallo schuetzejanett,

wenn du einen neuen Punkt einfügst, setzt du root ja immer auf diesen neuen Punkt.
Da schaut aber nicht so aus:
Delphi-Quellcode:
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;
root wird nur dann gesetzt wenn f_points = nil ist, d.h. wenn die Liste leer ist.
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:
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;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz