Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Schleife (https://www.delphipraxis.net/92937-problem-mit-schleife.html)

Fridolin 29. Mai 2007 07:45


Problem mit Schleife
 
Guten Morgen,

ich habe ein Problem mit folgender Schleife. Also, zuerst prüfe ich wieviele Einträge in meiner listbox stehen.
Danach setze ich die länge für mein Array fest und zuletzt möchte ich das dem Array in der Schleife die Namen der Einträge aus der Listbox zugewiesen werden. Aus irgendeinem Grund, kommt eine Exception mit der Meldung Zugriffsverletzung...
Was ich besonders seltsam finde ist, dass es manchmal (in 5% der Fälle) funktioniert. Das weiß ich weil ich es schon ein paar mal getestet hab weil ich der Meinung war das der Code so funktionieren müsste...

Delphi-Quellcode:
procedure TTA_Daten_HinzuDLG.Button3Click(Sender: TObject);
var dstnum,y,i,sch:integer;
dstlistar:array of string;
begin
 dstnum:=dstlist.Items.Count;
 setlength(dstlistar,dstnum);
 y:=1;

 sch:=0;
 for i:=1 to dstnum do begin

   dstlistar[y]:=dstlist.Items.Strings[sch];
   y:=y + 1;
   sch:=sch + 1;

 end;

label3.Caption:=dstlistar[1];

end;
MfG
Fridolin

Klaus01 29. Mai 2007 07:51

Re: Problem mit Schleife
 
Delphi-Quellcode:
procedure TTA_Daten_HinzuDLG.Button3Click(Sender: TObject);
var
  dstnum,i:integer;
  dstlistar:array of string;
begin
  dstnum:=dstlist.Items.Count;
  setlength(dstlistar,dstnum);

  for i:=0 to dstnum -1 do
    dstlistar[i]:=dstlist.Items.Strings[i];

  label3.Caption:=dstlistar[1];

end;
Auch dynamische Array fangen mit dem Index 0 an, genau wie die Items Deiner Listbox.
Der Endwert der Items der Listbox ist items.count -1.

Grüße
Klaus

Matze 29. Mai 2007 07:53

Re: Problem mit Schleife
 
Hallo Fridolin,

ein dynamisches Array beginnt mit Index 0 genau wie die Items einer Listbox. Das hier:

Delphi-Quellcode:
y:=1;
sch:=0;

for i:=1 to dstnum do begin

   dstlistar[y]:=dstlist.Items.Strings[sch];
   y:=y + 1;
   sch:=sch + 1;

end;
würde ich so schreiben:

Delphi-Quellcode:
for i := 0 to dstnum - 1 do
begin
  dstlistar[i] := dstlist.Items.Strings[i];
end;
Edit: Da es afaik i-1 heißen muss (weil sch um 1 niedriger ist) und ich bei 1 anfange, da er auf den vorigen Index zugreifen möchte, sende ich meinen Beitrag auch ab. ;) ABer ich muss zugeben, verstanden habe ich noch nicht, was der Code soll. :gruebel:

Edit 2: Achso 1:1 übertragen, dann hat Klaus recht, hab's angepasst.

TeronG 29. Mai 2007 07:56

Re: Problem mit Schleife
 
Zitat:

Zitat von Matze
Delphi-Quellcode:
for i := 1 to dstnum - 1 do
begin
  dstlistar[i] := dstlist.Items.Strings[i - 1];
end;

aber doch bei 0 startend oder!? :mrgreen: (immer diese Flüchtigkeitsfehler ^^)

Muetze1 29. Mai 2007 07:57

Re: Problem mit Schleife
 
@Matze: Du greifst trotzdem bei deinem beiden Codestücken auf das dynamische Array von 1..Count zu - entgegen deinen Aussagen.

/EDIT: Ok, nun nur noch bei deinem ersten Beispiel...
/EDIT2: Achso, erstes ist ein Zitat, nun, dann ist das richtig falsch - wobei richtig sich hier auf die Wiedergabe von Matze bezieht.

@Fridolin: Schalte mal bitte unter Projekt->Optionen->Compiler die Bereichsprüfung ein und erstelle dein Projekt komplett neu. Dann würdest du bei Zugriffe auf falsche Elemente benachrichtigt werden und kannst sowas leichter finden.

Matze 29. Mai 2007 07:58

Re: Problem mit Schleife
 
Ja, ich weiß. Es hat einmal bei Index 1 angefangen, das andere mal bei 0, daher dachte ich zuerst, er möchte etwas verschieben. Wenn er nämlich in der Schleife auf den vorigen Index zugegriffen hätte (so habe ich seinen Code zuerst interpretiert), dann wäre die 1 schon richtig. Mir kam aber dann, was er eigentlich möchte. *g*

Edit: Was verursache ich wieder für Dikusionen am frühen morgen. :roll: Es ist alles in Ordnung, Klaus hat's von Anfang an korrekt gemacht und ich habe mich zuerst geirrt. Ruhe jetzt. :mrgreen:
Edit 2: Der obere Code-Snippet ist doch 1:1 zitiert und stammt nicht von mir. :wall:

s-off 29. Mai 2007 07:59

Re: Problem mit Schleife
 
Wenn Du das ganze in der IDE laufen lässt, dann bekommst Du die Stelle angezeigt, an der es knallt.

Davon mal abgesehen, ist mir nicht ganz klar, was du mit den lokalen Variablen y und sch bezwecken willst, wenn Du das Ganze auch mit i bzw. i-1 machen kannst.

Und ein Array fängt bei 0 an; nicht bei 1.

Fridolin 29. Mai 2007 08:23

Re: Problem mit Schleife
 
Super, danke.... :dp:

Hab ich garnich dran gedacht :wall:


Zitat:

Zitat von s-off
Wenn Du das ganze in der IDE laufen lässt, dann bekommst Du die Stelle angezeigt, an der es knallt.

Davon mal abgesehen, ist mir nicht ganz klar, was du mit den lokalen Variablen y und sch bezwecken willst, wenn Du das Ganze auch mit i bzw. i-1 machen kannst.

Und ein Array fängt bei 0 an; nicht bei 1.

Haben Klaus und Muetze1 ja schon erklärt...


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