![]() |
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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