![]() |
Wie erkenne ich ob eine Zelle im array gefüllt ist?
HI
Ich habe bei einem Programm vollgendes Problem Ich habe ein zweidimensionales statisches array of integer
Delphi-Quellcode:
Manche Zellen dieses Arrays werden nun befüllt und manche bleiben auch freibeispiel :array [1..10,1..10] of integer; Frage: Gibt es eine möglichkeit herauszufinden ob z.B. beispiel [7,7] eine Zahl enthällt oder ob ich dieser Zelle vorher noch nichts zugewiesen habe. :gruebel: :dp: Danke schon im vorraus :-D |
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
Delphi-Quellcode:
var a: array [1..2, 1..2] of Integer;
begin a[1,1] := 3; showmessage(inttostr(a[1,1])); //gibt 3 aus... showmessage(inttostr(a[2,1])); //gibt bei mir (wieso auch immer) 201654148 aus end; |
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
HI
Naja so richtig hilft mir das auch nicht weiter, weil das programm dies erkennen soll. wenn ich eine zelle des arrays auslesen will was nicht gefüllt ist erhalte ich eine 0. Das problem ist nur das das programm diese 0 nicht von einer 0 entscheidet die es dort in das array eingetragen hat. :? Aber danke flaux |
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
wie soll das auch unterschieden werden? irgendein wert ist immer drin, also "Nix" gibts nicht (denk ich mal)
|
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
HI
Das ist ja gerade das dumme, deswegen werde ich mir wohl irgendeine andere sehr umständliche methode ausdenken müssen :cry: |
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
wenn du z.B. nur Werte zuweißt, die größer 0 sind, dann kanst du ja ganz am Anfang überall -1 reinschreiben und wenn dann der Wert immernoch -1 ist, dann ist noch nichts zugewiesen.
oder du machst 2 Array's
Delphi-Quellcode:
weist ebenfalls am Anfang dem Kontrolle-Array überall False zu
Werte: array [1..10,1..10] of integer;
Kontrolle: array [1..10,1..10] of boolean; und sobald du einen Wert im Werte-Array änderst, machst du einfach den entsprechenden Wert im Kontrolle-Array auf True das Zweite es geht auch damit
Delphi-Quellcode:
xyz: array [1..10,1..10] of Record
Wert: integer; Kontrolle: boolean; end; |
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
Überlege dir eine Zahl die du in dem Array nicht brauchst.
Und definiere alle Werte mit dieser Zahl als undefiniert. Fülle das Array als ersten Schritt mit dieser speziellen Zahl. Und schon weist du immer welcher Wert noch nicht gesetzt wurde. |
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
Zitat:
2. wenn du nach zellen suchst brauchst man 2 schleifen,
Delphi-Quellcode:
dazu musst du allerdings erst alle Zellen mit 0 füllen
for i :=0 to 10 do
begin for j :=0 to 10 do begin if a[i,j] =0 then showmessage('da is was'); end; end;
Delphi-Quellcode:
einfach ist es jedoch einen neuen typ zu definieren
for i :=0 to 10 do
begin for j :=0 to 10 do begin a[i,j]:=0; end; end;
Delphi-Quellcode:
wenn dir das zu arg ist kannst du auch Array of string[16] machn und prüfen ob a[i,j] <> ''. Das ist allerdings wieder problematischer da du erst prüfen musst ob <> '' ansonsten von string zu integer wandeln musst
type cell = record
value: integer; used: boolean; end; peace hboy Edit: formatiert und schwupp war einer schneller :drunken: |
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
kann NIL eigentlich nur einem Zeiger zugewiesen werden oder auch einem Integer?
|
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
NIL kann nur Zeigern zugewiesen werden.
Intern: NIL = 0 -> Null-Pointer |
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
Für floats gibt es NAN -> Not A Number ...nur leiber für integers nicht!
Nimm doch low(Integer) -> das sollte eine sehr grosse negative Zahl sein, die man eher selten braucht! |
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
Ich hab das just mit so etwas gelöst, was es auch bei Java gibt. Nämlich einer Art "Wrapper-Klasse". Mit dem Code sieht man, dass es einfacher ist, als es zunächst klingt:
Delphi-Quellcode:
Hat den Nachteil, dass man bei einer Wertzuweisung erst ein Objekt createn muss, aber wenn es gelöscht werden soll, so kann man es via:
type
TInteger = class(TObject) public value: Integer; constructor Create(val: Integer); end; var IntArray: array[0..15] of TInteger; . . . constructor TInteger.Create(val: Integer); begin inherited Create; value := val; end;
Delphi-Quellcode:
machen, und dann ergibt (auch wenn noch kein Objekt an "index" created wurde) ein "Assigned(IntArray[index])" = false. Und tädäää, schon weisst du, dass kein Wert drin ist.
FreeAndNil(IntArray[index]);
Und das ist so traumhaft objektorientiert, dass jeder Lehrer/Prof. Freudensprünge machen müsste :lol:. gruss, dizzy |
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
HI
Danke für die Antworten. Habe mich entschieden ich füll das array vorher mit einer zahl und wenn die hinterher dort noch steht dann hat sich nichts geändert. |
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
Delphi-Quellcode:
if ... <> nil then ...;
|
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
@Nonsense
es handelt sich hierbei um Integer und dazu gab es witeroben diesen Beitrag - soviel zu nil Zitat:
|
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
Zitat:
|
Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 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