![]() |
Arrays auswerten mit for-schleife
:hi:
Also der Titel war nicht einfach zu wählen, hoffe er ist passend. Ich habe eine Schleife, die mir ausspuckt ob zwei Integer-Werte (die gleichen) innerhalb eines Arrays vorhanden sind:
Delphi-Quellcode:
Zugewiesen habe ich tesweise wie folgt:
for a := 1 to 5 do
begin if (AvBlatt[a] <> nil) then begin if ((AvBlatt[a].X)=(AvBlatt[(AvBlatt[a].X)].Y)) then begin Showmessage('Karte '+IntToStr(AvBlatt[(AvBlatt[a].X)].X)+' und Karte '+IntToStr(AvBlatt[a].X)); Break; end; end; if (AvBlatt[a] = nil) then begin // end; end;
Delphi-Quellcode:
Ich habe also ein Array (ABlatt) mit gleichen/verschiedenen Zahlenwerten. Welche dieser Werte gleich sind oder nicht schreibe ich ein weiteres Array (AvBlatt). Dieses Array (AvBlatt) hat dann zwei integer-Einträge z.B. "X=1,Y=2".
ABlatt[1]:=TKarte.Create((random(13)+1),kfKaro,1);
ABlatt[2]:=TKarte.Create((random(13)+1),kfPik,2); ABlatt[3]:=TKarte.Create((random(13)+1),kfKreuz,3); ABlatt[4]:=TKarte.Create((random(13)+1),kfKaro,4); ABlatt[5]:=TKarte.Create((random(13)+1),kfHerz,5); AvBlatt[1].X:=1 und AvBlatt[1].Y:=3 würde also bedeuten: ABlatt[1].X = ABlatt[3].X Mit der obigen Schleife gehe ich also die Werte durch und .gehe bei der 1. Übereinstimmung raus. Das funktioniert wunderbar für den fall, dass nur ein mal 2/3/4 zahlen gleich sind. Wenn ich 2 mal 2 gleiche habe bekomme ich nur das 1. paar zurück, weil ich aus der Schleife herausgehe, bevor sie beim späteren Päärchen angekommen ist. Es ist etwas kompliziert, aber ich hoffe mir kann jemand helfen :? Ich möchte natürlich alle doppelten Zahlen aus dem Array (AvBlatt), allerdings ohne dass ich eine Ausgabe wie "Karte 1 und Karte 3" und "Karte 3 und Karte 1" bekomme. Das hatte ich schon und hilft mir nicht weiter. Ich baute das break; ein, damit ich nur noch "Karte 1 und Karte 3" bekomme. Dadurch entstand aber das Problem, das nachfolgende Pärchen ignoriert werden. :cry: |
Re: Arrays auswerten mit for-schleife
Ha! Eigenlob stinkt, aber ich kann ganz genial sein :mrgreen:
Ich habs hinbekommen und kann mir den kompletten 2. Array gleich noch sparen :D Der Code:
Delphi-Quellcode:
Der Code überprüft jetzt, ob doppelte Zahlen vorhanden sind, egal an welcher Stelle. Muss nur noch der Fall von drei/vier gleichen Zahlen eingebaut werden :???:
for a := 1 to 5 do begin
for b := 1 to 5 do begin if (ABlatt[a].Wert = ABlatt[b].Wert) then begin if (ABlatt[a].Position <> ABlatt[b].Position) then begin Showmessage('Karte '+IntToStr(ABlatt[b].Position)+' und Karte '+IntToStr(ABlatt[a].Position)); end else break; end; end; end; Danke an die, die sich immerhin die Mühe gemacht haben, mein Problem zu verstehen :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 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