Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi mehrere Zufallszahlen, dürfen aber nicht gleich sein (https://www.delphipraxis.net/119173-mehrere-zufallszahlen-duerfen-aber-nicht-gleich-sein.html)

XXcD 21. Aug 2008 13:55


mehrere Zufallszahlen, dürfen aber nicht gleich sein
 
Hallo,
ich müsste für ein Spiel 4 verschiedene Zufallszahlen erzeugen.
Diese Zahlen dürfen auf keinen Fall gleich sein.
Wie kann ich das verwirklichen?

Luckie 21. Aug 2008 14:05

Re: mehrere Zufallszahlen, dürfen aber nicht gleich sein
 
Mit Hilfe der Forums-Suche.

Nur zwei Ideen auf die Schnelle:
1. Merk dir die gezogenen Zahlen und zieh noch mal, wenn du eine ziehst, die schon mal gezogen wurde.
2. Füll eine List mit den Zahlen, die gezogen werden dürfen und wähle davon zufällig vier Stück aus.

XXcD 21. Aug 2008 14:10

Re: mehrere Zufallszahlen, dürfen aber nicht gleich sein
 
joar mit den Zahlen merken.
Kann ich das mit einer while Schleife machen? wen ja dann wie?

Medium 21. Aug 2008 14:17

Re: mehrere Zufallszahlen, dürfen aber nicht gleich sein
 
Dies und das. Die Suchfunktion ist - insbesondere nach einem Hinweis darauf - dazu da benutzt zu werden. Und es ist nichtmal schwer!

XXcD 21. Aug 2008 14:22

Re: mehrere Zufallszahlen, dürfen aber nicht gleich sein
 
Ok danke, ich wußte einfach nicht wonach ich suchen sollte.
Aber mit den Lottozahlen hätte ich auch selbst drauf kommen können.

Luckie 21. Aug 2008 14:46

Re: mehrere Zufallszahlen, dürfen aber nicht gleich sein
 
Auf die Schnelle:
Delphi-Quellcode:
type
  TIntArray = array of Integer;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
end;

procedure TForm1.Button1Click(Sender: TObject);

  function IsInIntArray(AIntArray: TIntArray; z: Integer): Boolean;
  var
    i: Integer;
  begin
    result := False;
    for i := 0 to length(AIntarray) - 1 do
    begin
      if z = AIntArray[i] then
      begin
        result := True;
        break;
      end;
    end;
  end;

var
  IntArray: TIntArray;
  cnt: Integer;
  i: Integer;
  z: Integer;
  s: string;
begin
  SetLength(IntArray, 4);
  cnt := 0;

  while cnt < 4 do
  begin
    z := Random(99);
    if not IsInIntArray(IntArray, z) then
    begin
      IntArray[cnt] := z;
      Inc(cnt);
    end;
  end;

  for i := 0 to length(IntArray) - 1 do
    s := s + IntToStr(IntArray[i]) + ' ';
  ShowMessage(s);
end;
Da müsste man natürlich noch eine Funktion rausmachen oder so.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 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