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:
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;
Zugewiesen habe ich tesweise wie folgt:
Delphi-Quellcode:
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);
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".
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.