![]() |
Array konstant?
hallo,
Ich Programiere ein Labyrinth, und hab's momentan wie folgt implimentiert:
Delphi-Quellcode:
Problem: ConstxSize und constYSize sind KOnstant ;) und ich kann (soweit ich weiß) nicht die constanten ändern wenn ich den typ via constructor initialisiere...
const constXSize=10;
constYSize=10; Type TMaze=class Private TargetCanvas:TCanvas; MazeMemImg:array[0..constXSize, 0..constYSize] of Record N,E,S,W:boolean; end; Public constructor Create(width, height : Integer); end; also was ich suche ist eigentlich ein dynamisches array. so wie mann es z.b. auch in TStrings findet. mit [Zeile][Zeichen]. doch wie kann ich ein solches 2 dimensionales, dynamisches array erstellen? |
Re: Array konstant?
moin,
Dynamische Arrays: Deklaration:
Delphi-Quellcode:
Die Größe wird mit setlength geregelt:
D2Array: array of array of {beliebiger Typ};
Delphi-Quellcode:
Zugriff:
setlength( D2Array, countX, countY );
Delphi-Quellcode:
und zur Vollständigkeit noch:
x := D2Array[X,Y]; // wobei der Index immer von 0 bis length(D2Array)-1 (=high(D2Array) läuft
man kann auch dynamische Arrays mit unterschiedlicher Zeilenlänge erzeugen. z.B:
Delphi-Quellcode:
setlength( D2Array, 3 ); // drei "Zeilen"
setlength( D2Array[0], 5 ); // die erste Zeile hat 5 Elemente setlength( D2Array[1], 3 ); // die zweite Zeile hat 3 Elemente setlength( D2Array[2], 1 ); // die dritte Zeile hat 1 Element |
Re: Array konstant?
WOW!!!
DANKE für diese wirklich sehr sehr schnelle Antwort. Hab eine frage zum beispiel:
Delphi-Quellcode:
wären das nicht 4 "Zeilen" da, [0] bis [3].. ?
setlength( D2Array, 3 ); // drei "Zeilen"
setlength( D2Array[0], 5 ); // die erste Zeile hat 5 Elemente setlength( D2Array[1], 3 ); // die zweite Zeile hat 3 Elemente setlength( D2Array[2], 1 ); // die dritte Zeile hat 1 Element und eine weitere frage: besteht eine funktion welche die größ des arrays ausgiebt? (wie ubound(Array) & lbound(Array) in VBS(Upper bzw Lower bound)) also Groesse( setlength(array, 5) ) -> 5 |
Re: Array konstant?
|
Re: Array konstant?
Zitat:
Zitat:
Delphi-Quellcode:
var Arr: array[0..2, 1..5] of Integer;
[...] Length(Arr) -> 3 High(Arr) -> 2 Low(Arr) -> 0 Length(Arr[0]) -> 5 Length(Arr[1]) -> 5 High(Arr[0]) -> 5 Low(Arr[0]) -> 1 [Edit] Zu langsam!! hätte ich nicht eigentlich von der DP darauf aufmerksam gemacht werden sollen? [/Edit] |
Re: Array konstant?
mit setlength() legst du die Anzahl der Elemente fest; und mit length() fragst du sie wieder ab: d.h. das Array läuft immer von 0 bis length()-1. wobei du statt length()-1 auch high() verwenden kannst.
|
Re: Array konstant?
wow echt super! sind ja wirklich viel leute die helfen! DANKE DANKE DANKE!
Ich habe allerdings ein problem mit setlenght(): --------------------------- Mazebacktracker --------------------------- Access violation at address 00404A49 in module 'MazeBacktracker.exe'. Read of address 6D726F42. --------------------------- OK --------------------------- :shock:
Delphi-Quellcode:
und:
unit MazeClass;
interface uses Graphics; Type TMaze=class Private TargetCanvas:TCanvas; MazeMemImg: array of array of Record N,E,S,W:boolean; end; Public constructor Create; end; implementation constructor TMaze.Create; begin setlength(MazeMemImg,10,10); end; end.
Delphi-Quellcode:
ich bekomme die oben stehende fehler meldung wenn die prozedure button1click aufgerufen wird.
procedure TForm1.Button1Click(Sender: TObject);
var test:TMaze; begin test.Create(); end; was habe ich falsch gemacht? :gruebel: |
Re: Array konstant?
Zitat:
es müsste lauten:
Delphi-Quellcode:
test := tMaze.Create()
|
Re: Array konstant?
ahh danke!
ist das erstem mal das ich mit mit klassen beschäftige, und selber eine schribe.. freu mich schon über was auch mich zukommen wird (an fehler meldungen) :P Nochaml ein SUPER GROßES DANKE!!!! :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz