Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Arrays kopieren mit Hindernissen (https://www.delphipraxis.net/2514-arrays-kopieren-mit-hindernissen.html)

Brüggendiek 27. Jan 2003 18:06

Hallo KeeN!

Die inkompatiblen Tpyen kommen daher:
Zitat:

Zitat von KeeN
Code:
  list1: array of integer;
  list2: array of integer;

Dadurch sind zwei Arrays mit unterschiedlichem Typ deklariert!
Lösung: entweder, wie schon vorgeschlagen, einen Typ deklarieren, oder:
Code:
list1, list2: array of integer;
Dann ist der Typ gleich!

Klingt komisch, ist aber so in der Hilfe beschrieben!

Gruß

Dietmar Brüggendiek

KeeN 27. Jan 2003 18:06

+muah+ ich kriech die krise! das funktioniert zwar jetzt mit copy aber der macht trotzdem wieder nur 4 von 5 zahlen... :freak: :wall:

Brüggendiek 27. Jan 2003 18:21

Hallo KeeN!

Ich habe das gerade bei mir (D5 Standard) mal ausprobiert - keine Probleme (mit meiner Deklaration in einem Durchgang).

Bist Du sicher, daß Dein Ausgangsfeld Länge 5 ist und alle 5 Werte belegt hat???

@Christian Seehase: Length(dynArray) ist immer 4 (weil ein Pointer)!!

Gruß

Dietmar Brüggendiek

KeeN 27. Jan 2003 18:26

ja bin ich. also ich hab zwei listboxen. listbox1 gibt die in array1 (list1) generierten zufallszahlen aus. und das sind 5. listbox2 gibt die dinger sortiert aus. und da sind es immer nur 4. ich hab auch schon probiert list1 in list2 zu kopieren und dann in listbox2 auszugeben, das gleich ergebnis ... wieder nur 4.

KeeN

Brüggendiek 27. Jan 2003 18:55

Hallo nochmal!

Zitat:

Zitat von Luckie
Geht das nicht:
Code:
List2 := List1;

Das geht definitiv nicht - jedennfalls nicht so, wie man sich das normalerweise wünscht! Dann sind nämlich beide Felder dasselbe und Änderungen am einen betreffen auch das andere!
Dynamische Arrays sind (wie Strings) Pointer. Mit Deiner Zuweisung werden beide Pointer auf dasselbe Array gesetzt - und dazu muß List2 nicht einmal initialisiert sein!!!

Es bleibt allerdings dabei, daß ich das hier vorhandene Problem nicht nachvollziehen kann.
Die einzig mögliche Ursache ist, daß List1 4 statt 5 Elemente hat.

Mein Testcode, ganz schnell zusammengeklopft:
Code:
var a,b:array of integer;
p:byte;

begin
setlength(a, 5);
setlength(b, 5);

for p:=0 to High (a) do
begin
a[p]:=random (100);
end;

for p:=0 to High (a) do
begin
b[p] := a[p];
end;


end;
Da enthalten beide Felder dann dieselben 5 Werte.

Gruß

Dietmar Brüggendiek

KeeN 27. Jan 2003 19:02

+hihi+ bei mir leider nicht. ich glaub langsam das liegt am kylix ich werd mich mal nach nem update umtun ...

danke trotzdem
KeeN

jbg 27. Jan 2003 20:01

Zitat:

Zitat von Brüggendiek
@Christian Seehase: Length(dynArray) ist immer 4 (weil ein Pointer)!!

Falsch! Was du meinst ist SizeOf(dynArray).

Christian Seehase 27. Jan 2003 22:27

Moin Keen,

lass' doch mal in der Schleife einen Zähler mitlaufen, und gebe dessen Wert nach Beendigung der Schleife aus, oder vielleicht sogar immer in der Schleife zusammen mit den jeweiligen Werten.

Das einzige was mir sonst noch einfällt:

Wenn List2 die Werte sortiert enthält: Wie sortierst Du?
Ist es im Bereich des Möglichen, dass Du in List2 nur deshalb nur vier Werte stehen hast, weil zwei der Werte in List1 gleich sind, und doppelte Werte bei Deinem Algo aussortiert werden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz