![]() |
Problem mit For... to... do... und Integer Array
Hallo,
ich benutze folgende Funktion, um festzustellen ob sich ein Integer als Wert in einem Integerarray befindet:
Delphi-Quellcode:
Die Funktion gibt entsprechend einen boolschen Wert zurück.
function IsInArray(navindex:integer; const a:array of Integer):Boolean;
var p,i : integer; begin for i := 0 to High(a) do begin p := a[i]; if p = navindex then begin Result := true; //Treffer Exit; end; end; Result := false; // nix gefunden end; Dies funktioniert ganz wunderbar außer bei IsInArray(0, [...]) oder IsInArray(0, [...]) Vermute das etwas mit der 0 und der For Schleife nicht hin haut, komme aber nicht drauf. Vermutlich ist es einfach zu spät... :freak: |
Re: Problem mit For... to... do... und Integer Array
Änder mal den Code ein wenig:
Delphi-Quellcode:
Wahrscheinlich liegts an der Klammerung im if..then, ist aber nur eine Vermutung.
function IsInArray(navindex:integer; const a:array of Integer):Boolean;
var i : integer; begin for i := 0 to High(a) do begin if (a[i] = navindex) then begin Result := true; //Treffer Exit; end; end; Result := false; // nix gefunden end; MfG Binärbaum |
Re: Problem mit For... to... do... und Integer Array
Die Chose hat mich so gewurmt, daß ichs jetzt doch mal ausprobiert hab. Bei mir funktioniert dein Code einwandfrei.
Und - sorry Binärbaum - das mit der Klammersetzung war ein etwas seltsamer Tip. Was soll den diese Klammer an der Stelle verändern? :gruebel: Zitat:
Also wie gesagt, bei mir hat das auch so funktioniert. Egal ob die 0 drin war oder nicht, es wurde korrekt angezeigt. Etwas kannst du an dem Code aber auf jeden Fall verändern:
Delphi-Quellcode:
Das p kannste dir nämlich sparen. ;) Aber ansonsten würd ich das so lassen, wie es is. Ich konnte auf jeden Fall - wie ja bereits schon gesagt - weder im Code noch beim Testen nen Fehler feststellen.
function IsInArray(NavIndex : Integer; Const a : Array of Integer):Boolean;
Var i : Integer; Begin For i := 0 to High(a) Do Begin If a[i] = NavIndex Then Begin Result := true; //Treffer Exit; End; End; Result := false; // nix gefunden End; Was genau funktioniert da bei dir denn nicht? Wird es generell falsch angezeigt, oder nur in einem Fall? |
Re: Problem mit For... to... do... und Integer Array
Delphi-Quellcode:
Schreibe besser
for i := 0 to High(a) do
Delphi-Quellcode:
Da Arrays in Delphi normalerweise von 1..x laufen und nicht wie z.B. bei C von 0..x
for i := 1 to High(a) do
Edit: @ daniel: Sorry, mein Fehler - bin von nem Index beim String ausgegangen, da ist es so! Bei den Arrays hast du vollkommen recht |
Re: Problem mit For... to... do... und Integer Array
Zitat:
Wenn schon dann:
Delphi-Quellcode:
grüße, daniel
for i := Low(0) to High(a) do
|
Re: Problem mit For... to... do... und Integer Array
Da hat sich jetzt aber auch der Fehlerteufel eingeschlichen! ;)
Es sollte nicht
Delphi-Quellcode:
heißen, sondern
for i := Low(0) to High(a) do
Delphi-Quellcode:
for i := Low(a) to High(a) do
|
Re: Problem mit For... to... do... und Integer Array
Hoppala :mrgreen:
|
Re: Problem mit For... to... do... und Integer Array
Wenn, dann aber gleich richtig.
Die Funktion liefert auch gleich die Info, an welcher Position sich der Suchwert befindet.
Delphi-Quellcode:
function FindInArray(value : Integer; Const a : Array of Integer):Integer;
Var i : Integer; Begin For i := Low(a) to High(a) Do Begin If a[i] = value Then Begin Result := i; //Treffer Exit; End; End; Result := -1; // nix gefunden End; function IsInArray(value : Integer; Const a : Array of Integer):Boolean; begin Result := (FindInArray(value, a) <> -1); end; |
Re: Problem mit For... to... do... und Integer Array
Zitat:
|
Re: Problem mit For... to... do... und Integer Array
Darf man wissen, wie du deinen dynamischen Array erstellst?
SetLength(array, wert) ?? Da könnte der Hund vielleicht begraben sein. :-D Zitat:
//Edit: Weil
Delphi-Quellcode:
procedure TTestForm.FormCreate(Sender: TObject);
var b: array of byte; i: integer; begin SetLength(b, 1); // i := b[0]; // i ist 0 i := High(b); // hight -> 0 .. High gibt - 1 wenn SetLength(b, 0) for i := 0 to High(b) do begin ShowMessage('0'); end; end; |
Re: Problem mit For... to... do... und Integer Array
Hmm,
sorry für die viele Verwirrung. Also die Initalisierung der 2 Arrays, die ich durchsuchen lassen, mit anschließender Wertzuweisung sieht wie folgt aus:
Delphi-Quellcode:
...
SetLength(ArticlWVid, 3); SetLength(ArticlWAudio, 3); ArticlWVid[0] := 1; ArticlWAudio[0] := 2; ... Zitat:
Um dies nochmal zu erläutern: Mit [...] ist irgendein Array gemeint, über den der Suchalgorithmus läuft. Die Besonderheit dabei ist, das der Suchalgorithmus für alle Werte außer für (0, irgenein Array) das korrekte Ergebnis liefert. D.h. obwohl 0 kein Wert in dem zu durchsuchenden Array ist, gibt der Alg. TRUE zurück. Interessanterweise gibt er ebenfalls TRUE zurück, wenn ich 0 den beiden Arrays als Wert hinzufüge... |
Re: Problem mit For... to... do... und Integer Array
Du mußt irgendwo ne 0 in deinem Code versteckt haben. :shock:
Anders kann ich mir das nicht erklären. Der Code funktioniert bei mir, wenn keine 0 im Array vorhanden ist. Debug mal durch und schau dir an, was in deinem Array für Werte stehen (markier den Array während des debuggens und drück Strg + F7) |
Re: Problem mit For... to... do... und Integer Array
Also die Lösung lag letzendlich in der Definiton der Arrays:
Ich hatte zwar eine Länge von 3 angegeben, aber nur jeweils die POsition [0] mit einem Wert belegt. D.h. die nicht belegte Positionen wurden wohl als Integerwert 0 behandelt, um Exceptions zu vermeiden? Interessantes Compilerverhalten, wenn auch recht undurchsichtig.... In dem Fall wäre mir eine Exception lieber gewesen :-D |
Re: Problem mit For... to... do... und Integer Array
Zitat:
In den meisten Fällen ist es so, dass bei einer neuen und noch unbefüllten Datenstruktur die Werte erstmal mit Nullen gefüllt werden. Was man dann nicht initialisert hat ist also null. MfG Binärbaum |
Re: Problem mit For... to... do... und Integer Array
Grmpf... Ich bin doch einfach mal davon ausgegangen, daß du bereits überprüft hast, ob das Array richtig initialisiert wurde.
Aber interessehalber würde ich doch gerne meine Frage beantwortet haben: Zitat:
|
Re: Problem mit For... to... do... und Integer Array
in dem Ausdruck gibt es keinen, [...] steht für irgendein Array, in meinem Fall checke ich zwei arrays und die sind verschieden, daher fälschlicherweis das "oder".
|
Re: Problem mit For... to... do... und Integer Array
Aaaaah, jetzt kapier ich das! :mrgreen:
Naja, schön daß es jetzt funktioniert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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-2025 by Thomas Breitkreuz