Hallo,
hab irgendwo mal den Befehl
Map : array of TMap
gesehen. Das sieht aus als wäre es ein offenes array .. sowas bräuchte ich . leider Meckert der Compiler wenn ich
Map[1] := TMap.Create ;
eingebe.Wieso ?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Was sagt er denn? Eventuell beginnt dein Array ja bei 0 und nicht bei 1...
Meine Glaskugel is defekt. Ohne etwas mehr Code isses ganz schlecht zu beantworten.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
ich hab hier will jetzt ne schöne runde fläche per randomhoehen machen. Ich hab zwei möglichkeiten programmiert.
Die möglkichkeit, mit der ich arbeiden will, klappt nich so ganz .
erstmal die funktionierende
//hier hab ich beide möglichkeiten ausprobiert, gehen beide nicht
for u :=0to(anzY-1)do
begin
for s :=0to(anzX-1)do
begin
CtrlPoints2D[u,s,0]:= s ;
CtrlPoints2D[u,s,1]:=random(hoehe);
CtrlPoints2D[u,s,2]:= u ;
end;
end;
end;
hier rendert er mir auch eine fläche aber eine total wirre fläche.
was mir komisch forkommen anzX hat ja den wert 4. das würde ja array[0..3] ensprechen.
ich ich aber jetzt anstatt anzX nur die 3 eingebe meckert der Compiler nicht, dass der array zu klein ist.
also irgendwie klappt das mit dem zweiten array nicht ganz .. weiß einer warum ?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also, da du recht wenig Ahnung von Arrays hast solltest du im Delphi vorerst die Bereichsprüfung aktivieren.
Projekt -> Optionen -> Compiler -> Bereichsprüfung
Bei einem Array kann es ohne die Prüfung locker mal passieren, dass du zwar nur 4 Einträge hast aber auf den Eintrag 6-7 zugreifst und dann in einen anderen Speicherbereich hineinschreibst oder liest.
Dann musst du unterscheiden zwischen Dynamischen und Statischen Array.
Statisch array[0..9] of Integer. Da existieren dann immer die Felder 0 bis 9. Also ingesammt 10 Stück. Die Größe ist fest. Das lässt sich nicht ändern.
Dynamisch array of Integer. Die haben zu Begin eine Größe von 0. Mit SetLength kann du ihnen eine Größe zuweisen.
Du kannst im übrigen auch das Kleinste bzw das Größte Element eines Arrays. Das geht mit den Methode Low und High. Eine schleife könnte dann auch so aussehen.
Code:
for u :=Low(CtrlPoints2D)toHigh(CtrlPoints2D)do
for s :=Low(CtrlPoints2D[u])toHigh(CtrlPoints2D[u])do
Aber wäre in diesem Falle auch nichts anderes als 0 bis AnzY -1 und 0 bis AnzX -1. So gesehen würde ich sogar sagen, dass der Code der nicht gehen dürfte aber eigentlich fnktionieren müsste.
Zur Not könntest du aber auch dein Array konstrukt vereinfachen. Das Letzte müsste zum Beispiel auch nicht unbedingt ein Array sein, da in deinem Falle auch ein Single ausreichen würde. Der Grund ist S und U musst du nicht extra ablegen, da diese ja eigentlich durch die Koordinaten im Array definiert wären. Dann würde ein array of array of single vollkommen genügen.
Zum Setzen der Größe würde ich SetLength(CtrlPoints2D, anzZ, anzX); benutzen. Das ist eigentlich genau das Gleich wie die andere Variante nur mit dem unterschied, dass hier alles in einem Rutsch passiert.
Ich würde dir auch mal Empfehlen das Debugger Tutorial durchzulesen. Und dann mal zu schauen wie die Struktur nach dem Setzen der Größe aussieht und wie es sich mit Daten füllt. Bei 3*4 sollte das kein Ding sein. Wenn das so aussieht wie man es erwarten würde dann würde ich mal deine Ausgabe untersuchen. Vielleicht macht die ja Murks.
Mitglieder in diesem Forum: Bing [Bot], Majestic-12 [Bot] und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.