Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Warum werden zwei elemente gelöscht ? (https://www.delphipraxis.net/26793-warum-werden-zwei-elemente-geloescht.html)

mimi 29. Jul 2004 13:40


Warum werden zwei elemente gelöscht ?
 
Hallo,
Code:
var
  i:Integer;
begin
  if HIGH(ball) -1 > 0 then begin
    for i:=Index to HIGH(BALL) do
      BALL[i]:=BALL[i+1];
    SetLength(BALL,high(ball)-1 );
  end;
ich dachte mir: das ich einfach von index bis array größe gehe und dabei alle elemente um eins nach vorne schiebe und anschließend denn array verkleiner, das geht auch, nur werden, dann immer zwei elemente gelöscht und ich weiß nicht warum !!!

Mario 29. Jul 2004 13:43

Re: Warum werden zwei elemente gelöscht ?
 
So sollte es gehen:
Delphi-Quellcode:
var
  i:Integer;
begin
  if HIGH(ball) -1 > 0 then begin
    for i:=Index to HIGH(BALL)-1 do
      BALL[i]:=BALL[i+1];
    SetLength(BALL,high(ball));
  end;
High ergibt bereits das letzte Element!

Luckie 29. Jul 2004 13:44

Re: Warum werden zwei elemente gelöscht ?
 
Lass uns mal zusammen überlegen. Also nehmen wir an, wir haben 10 Elemente (0 - 9). High gibt jetzt als Index für dich 9 zurück, weil das das letzte Element ist. length hingeben gibt die tatsächliche Anzahl der Elemente zurück, also hier 10. Ich meine du müsstest was mit length basteln. Oder du lässt bei SetLength das -1 weg, dann sollte es auch gehen. Ich persönlich verwende lieber length, da ich mir da etwas sicherer bin, was ich zurückbekomme.

Grumble 29. Jul 2004 13:47

Re: Warum werden zwei elemente gelöscht ?
 
hi,

versuchs mal mit setlength(ball,length(ball)-1);


huch war wieder zu langsam :)

mimi 29. Jul 2004 13:53

Re: Warum werden zwei elemente gelöscht ?
 
vieln Dank, daran hast gelegen....

Mario 29. Jul 2004 14:15

Re: Warum werden zwei elemente gelöscht ?
 
Und vergiss nicht die Schleife um eins zu vermindern, Du bekommst sonst irgendwann sporadische Zugriffsverletzungen, da Du mit einem Element arbeitestet, was ausserhalb des Arrays liegt.

mimi 29. Jul 2004 14:25

Re: Warum werden zwei elemente gelöscht ?
 
danke....


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:13 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