![]() |
Zahl sollte nich im Set1 und im Set2 sein ist aber in Set2
Erstmal Hi :hi:
Ich bin dabei mir ein kleines Programm zu schreiben welches aus einer ListBox mit Namen zufällig 2, 4 oder 6 Namen auswählt. Wenn die Funktion das 2. mal aufgerufen wird sollten die letzten Namen nich wieder auftauchen. Der Code sieht nun so aus:
Delphi-Quellcode:
Aber leider tauchen die Namen vom letzten mal nach dem neuen Klick wieder auf. :(
procedure TForm1.cmdGetPlayersClick(Sender: TObject);
type TPlayersResult = set of 1..255; //Set für den neuen Durchgang TPlayersLastResult = set of 1..255; //Set für den vorherigen Druchgang //Zufallszahlen generation Count= druchläufe der Schleife; MaxValue= MaxVal für Rnd; TPlayersResult= Set mit den Zahlen function Players(ACount : Byte; AMaxValue : Byte) : TPlayersResult; var i: Byte; number: Byte; LastResult : TPlayersLastResult; //Init der Variablen begin if ACount > AMaxValue then //Ist die Anzahl der durchläufe größer als der Maximale Wert für Rnd? raise EInvalidOp.Create('Man kann nicht mehr Namen aus der Liste ziehen, als vorhanden!'); Result := []; //Set leeren for i := 1 to ACount do // Starten der Schleife begin repeat number := Random(aMaxValue); //Generieren der Zahlen until not(number in Result) AND not(number in LastResult); //Vergleich der Zahlen ob schon im Set; 2. Vergleich geht nicht?O.o Include(Result, number); //Zahl einfügen in das Set end; end; var max : Integer; PlayersResult: TPlayersResult; PlayersLastResult : TPlayersLastResult; i: Byte; //Init der Variablen begin max := ListBox1.Items.Count; //max = MaxValue der Zufallfunktion if valAnzahl2.Checked = true then begin //Funktionsaufruf für die zufalls wahl von 2Spielern PlayersResult := Players(2, max); //Funktion Players(Spieler, MaxAnzahlSpieler) Memo1.Lines.Clear; //Memo für die Ergebnisanzeige leeren for i := 0 to max do //Schleife zum Übertragen der Namen begin if i in PlayersResult then //Auslesen des Strings Memo1.Lines.Add(ListBox1.Items.Strings[i]); //Namen von der ListBox ins Memo PlayersLastResult := []; //Set mit dem letzten ergebnis leeren PlayersLastResult := PlayersResult; //Aktuelles Ergebnis wird zu letztem Ergebnis end; end else if valAnzahl4.Checked = true then begin //Das ganze für 4 Spieler PlayersResult := Players(4, max); Memo1.Lines.Clear; for i := 0 to max do begin if i in PlayersResult then Memo1.Lines.Add(ListBox1.Items.Strings[i]); PlayersLastResult := []; PlayersLastResult := PlayersResult; end; end else if valAnzahl6.Checked = true then begin //Das ganze für 6 Spieler PlayersResult := Players(6, max); Memo1.Lines.Clear; for i := 0 to max do begin if i in PlayersResult then Memo1.Lines.Add(ListBox1.Items.Strings[i]); PlayersLastResult := []; PlayersLastResult := PlayersResult; end; end end; Irgendwie erkenn ich den Fehler nicht :wall: Weiß wer von euch Hilfe? |
Re: Zahl sollte nich im Set1 und im Set2 sein ist aber in Se
Ich habe mir das nicht in allen Einzelheiten angesehen, aber lokale Variablen gelten nur innerhalb der Funktion, in der sie deklariert sind. Du könntest sie nun global definieren oder besser als private Felder von Form1. So bleiben sie für die Dauer des Programmablaufs gültig.
|
Re: Zahl sollte nich im Set1 und im Set2 sein ist aber in Se
Hmm die Sets ändern sich aber nicht oder?
Weil ein Ergebnis bekomme ich ja. Also die Namen aus der ListBox werden im Memo angezeigt. Aber ich werde die Variablen und die Sets dazu mal Global definieren. //edit Hab die Sets nun Glogal definiert geändert hat sich nichts. Kann es sein dass das Set mit den letzten Zahlen immer leer ist? :gruebel: Irgendwie beiß ich mir die Zähne daran aus :| |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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 by Thomas Breitkreuz