Ist natürlich nicht wirklich performant.
So eine Zufallszahlen-Liste ist schneller mit einer zufälligen Sortierung erreicht.
Aber hier mal dein Ansatz komplettiert:
Delphi-Quellcode:
var
rZahl : array [0 .. 15] of Integer;
temp, i : Integer;
Unique : Boolean;
j : Integer;
begin
// Erste Zufalls-Zahl setzen (die ist per Definition auch einzigartig im Array)
rZahl[ low( rZahl )] := Random( 16 );
// Wir Starten mit dem 2. Array-Eintrag
i := low( rZahl ) + 1;
while i <= high( rZahl ) do
begin
repeat
// Unique-Flag
Unique := True;
// Neue Zufallszahl ermitteln
temp := Random( 16 );
// mit allen bisherigen Zufallszahlen vergleichen
for j := low( rZahl ) to i - 1 do
// Wenn es die schon gibt, dann ...
if rZahl[j] = temp
then
begin
// ... ist die also nicht mehr einzigartig
Unique := False;
// und wir können diese For-Schleife auch schon verlassen
Break;
end;
// solange wiederholen, bis wir eine einzigartige Zufallszahl erhalten haben
until Unique;
// Zufalls-Zahl dem Array zuweisen
rZahl[i] := temp;
// Ausgabe der Zahl
txtRandoms.Text := txtRandoms.Text + IntToStr(rZahl[i]) + '; ';
// und zum nächsten Array-Eintrag hüpfen :-)
inc( i );
end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)