Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FreePascal Fehler im for loop (https://www.delphipraxis.net/172205-fehler-im-loop.html)

Gunny 18. Dez 2012 17:47

Delphi-Version: XE2

Fehler im for loop
 
Hallo,
ich bin neu hier und bin mir gerade nicht sicher, ob das Thema hierhin gehört.
Ich programmiere in Lazarus v1.0.4

Ich habe eine Listbox mit bis zu 64 Einträgen und für die Verarbeitung möchte ich jetzt jedem Indexplatz einer Variablen zuweisen.

Delphi-Quellcode:
procedure TForm1.Round_1_CreateClick(Sender: TObject);
var
  p1, p2, p3, ......, p64 : String;
  i, j, num_players : Integer;
begin
  num_players := Form1.Playerlist.Items.Count;
  for i := 1 to num_players do
      begin;
           j := i-1;
           p[i] := Form1.Playerlist.Items.Strings[j];
      end;
end;
Beim kompilieren wird allerdings nicht die p*-Variable erkannt (Error: Identifier not found "p")

Was mache ich falsch?
Danke für die Hilfe.

DeddyH 18. Dez 2012 17:49

AW: Fehler im for loop
 
Mir scheint, Du suchst ein Array.
Delphi-Quellcode:
var
  p: array[1..64] of String;

Klaus01 18. Dez 2012 18:08

AW: Fehler im for loop
 
und sollte die Schleife nicht von 0 bis count -1 laufen?

Delphi-Quellcode:
begin
  num_players := Form1.Playerlist.Items.Count;
  for i := 0 to num_players -1 do
      begin;
           j := i-1;
           p[i] := Form1.Playerlist.Items.Strings[j];
      end;
end;
oder verhält sich lazarus bei Listen da anders?

Das Array sollte dann auch bei 0 starten.
Grüße
Klaus

Gunny 18. Dez 2012 18:19

AW: Fehler im for loop
 
Mit dem Array funktionierts nach kurzem Umbau.

Delphi-Quellcode:
procedure TForm1.Round_1_CreateClick(Sender: TObject);
var
  i, j : Integer;
  p : array[1..64] of string; //steht eigentlich in der globalen var
begin
  num_players := Form1.Playerlist.Items.Count; //Items.Count fängt bei 1 an
  for i := 1 to num_players do
      begin;
           j := i-1;
           p[i] := Form1.Playerlist.Items.Strings[j]; //Items.Strings fängt bei 0 an, daher j := i-1
      end;
end;
Ich fange nicht bei p0 an, damit ich später nicht durcheinander komme, da p1 = Player 1.

Vielen Dank.

Helmi 18. Dez 2012 19:06

AW: Fehler im for loop
 
Hallo,

du brauchst keine zusätzliche Variable um eins abzuziehen

anstatt:
Delphi-Quellcode:
  for i := 1 to num_players do
       begin;
            j := i-1;
            p[i] := Form1.Playerlist.Items.Strings[j]; //Items.Strings fängt bei 0 an, daher j := i-1
       end;
geht das: (j brauchst nicht mehr)
Delphi-Quellcode:
  for i := 1 to num_players do
       begin;
            p[i] := Form1.Playerlist.Items.Strings[i - 1];
       end;
oder das:
Delphi-Quellcode:
  for i := 1 to num_players do
       begin;
            p[i] := Form1.Playerlist.Items.Strings[Pred(i)];
       end;

lbccaleb 18. Dez 2012 20:11

AW: Fehler im for loop
 
Oder das

Delphi-Quellcode:
  for i := 1 to num_players do
       begin;
            p[i] := Form1.Playerlist.Items.Strings[Dec(i)];
       end;

uligerhardt 18. Dez 2012 20:18

AW: Fehler im for loop
 
Zitat:

Zitat von lbccaleb (Beitrag 1195964)
Oder das

Delphi-Quellcode:
  for i := 1 to num_players do
       begin;
            p[i] := Form1.Playerlist.Items.Strings[Dec(i)];
       end;

Delphi-Quellcode:
Pred(i)
:mrgreen:

Helmi 18. Dez 2012 20:52

AW: Fehler im for loop
 
Zitat:

Zitat von lbccaleb (Beitrag 1195964)
Oder das

Delphi-Quellcode:
  for i := 1 to num_players do
       begin;
            p[i] := Form1.Playerlist.Items.Strings[Dec(i)];
       end;

Delphi-Quellcode:
Dec
ist eine Procedure und keine Function. Deswegen
Delphi-Quellcode:
Pred

jfheins 18. Dez 2012 21:03

AW: Fehler im for loop
 
Oder gleich das Array bei 0 anfangen und dann beides mit dem gleichen Index ansprechen :stupid:


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