Avatar billede stoney Nybegynder
07. oktober 2003 - 13:00 Der er 9 kommentarer og
1 løsning

Jeg må være blind

Nu har jeg stirret mig blind længe nok.
Jeg har et array of integer og en Tstringlist.
Jeg vil herefter checke om items's i arrayet
er i min Tstringlist.
Hvad gør jeg forkert ?

<snip>

var
strlist : tstringlist;
aint,i : integer;
begin
strlist := tstringlist.Create;
strlist.Add('11');
strlist.Add('56');
strlist.Add('44');
strlist.Add('22');
memo1.Clear;
begin
for i := 0 to strlist.Count - 1 do



begin
for AInt := low(myarray) to high(myarray) -1 do
if strlist.IndexOf(inttostr(myarray[i])) = -1 then
memo1.Lines.Add('match')


else

memo1.Lines.Add('no match')

end;
strlist.free;
end;
end;

Stoney
Avatar billede klasker Nybegynder
07. oktober 2003 - 13:05 #1
Hvad sker der når koden udføres?
Kommer der en fejl eller hvad?
Avatar billede stoney Nybegynder
07. oktober 2003 - 13:09 #2
Den giver et forkert resultat.
Dette er mit array

myarray[0] := 22;
myarray[1] := 56;
myarray[2] := 44;

Den giver
no match
no match
no match
no match
no match
no match
match
match

Det burde være

no match
match
match
match

Stoney
Avatar billede snowball Novice
07. oktober 2003 - 13:23 #3
Nedenstående kode giver no match, match, match, match hos mig.

procedure TForm1.Button1Click(Sender: TObject);
var
  strlist : tstringlist;
  aint,i : integer;
  Match: Boolean;
begin
  strlist := tstringlist.Create;
  strlist.Add('11');
  strlist.Add('56');
  strlist.Add('44');
  strlist.Add('22');
  memo1.Clear;
  for i := 0 to strlist.Count - 1 do begin
    Match := False;
    for AInt := low(myarray) to high(myarray) -1 do Begin
      if strlist.IndexOf(inttostr(myarray[i])) = -1 then
      Else Begin
        Match := True;
        Break;
      End;
    End;
    If Match Then
      memo1.Lines.Add('match')
    Else
      memo1.Lines.Add('no match')
  End;
  strlist.free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  myarray[0] := 22;
  myarray[1] := 56;
  myarray[2] := 44;
end;

Snowball
Avatar billede doc404 Novice
07. oktober 2003 - 13:29 #4
1.
Du behøver ikke trække 1 fra når du bruger High(array)
2.
if strlist.IndexOf(inttostr(myarray[i])) >= 0 then
memo1.Lines.Add('match')
Avatar billede athlon-pascal Juniormester
07. oktober 2003 - 13:40 #5
for AInt := low(myarray) to high(myarray) -1 do
skal vist være
  for AInt := low(myarray) to high(myarray) do
som doc404 også gør opmærksom på :-)

Dernæst, så prøv at fjerne

for i := 0 to strlist.Count - 1 do

Derfor:

var
  strlist : tStringList;
  aint : Integer;
begin
  strlist := tStringList.Create;
  strlist.Add('11');
  strlist.Add('56');
  strlist.Add('44');
  strlist.Add('22');
  memo1.Clear;

  for AInt := low(myarray) to high(myarray) do
    if strlist.IndexOf(inttostr(myarray[AInt])) = -1 then
      memo1.Lines.Add('match')
    else
      memo1.Lines.Add('no match');

  strlist.Free;
end;
Avatar billede athlon-pascal Juniormester
07. oktober 2003 - 13:49 #6
Det her er testet og virker:

var
  strlist : tStringList;
  aint, I: Integer;
  myarray: Array [0..2] of Integer;
begin
  myarray[0] := 22;
  myarray[1] := 56;
  myarray[2] := 44;

  strlist := tStringList.Create;
  strlist.Add('11');
  strlist.Add('56');
  strlist.Add('44');
  strlist.Add('22');
  memo1.Clear;

  for I := 0 to strlist.Count - 1 do
    for AInt := low(myarray) to high(myarray) do
      if strlist[I] = inttostr(myarray[AInt]) then
      begin
        memo1.Lines.Add('match');
        Break;
      end
      else if AInt = high(myarray) then
        memo1.Lines.Add('no match');

  strlist.Free;
end;
Avatar billede stoney Nybegynder
07. oktober 2003 - 14:14 #7
snowball > Den giver det omvendte resultat. (jeg kan nu godt
selv rette det)

athlon-pascal virker 100%, så det vel ham der skal have point.
Skriv lige hvis du er utilfreds.

Stoney
Avatar billede athlon-pascal Juniormester
07. oktober 2003 - 14:20 #8
Svar :-)

Snowballs løsning kommer til at virke den rigtige vej, hvis du udskifter
  for i := 0 to strlist.Count - 1 do begin
med
  for i := strlist.Count - 1 downto 0 do begin
:-)
Avatar billede snowball Novice
07. oktober 2003 - 14:23 #9
Ved ikke lige helt hvad jeg fik lavet om her til sidst. Det virkede da jeg skrev det. Oh, well - it's a strange world we live in ;)

Snowball
Avatar billede stoney Nybegynder
07. oktober 2003 - 14:24 #10
athlon-pascal > som jeg sagde "jeg kan nu godt
selv rette det" :-)

Tak for hjælpen

Stoney
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester