Ich habe die Zahlen {1,2,3,4,5}, die durch einen Command immer zufällig in zwei Servervariablen gespeichert werden sollen. Dabei sollen beide Variablen aber nicht die gleiche Zahl enthalten.
Habe es bisher nur so hinbekommen, dass die Variablen in manchen Fällen die gleiche Zahl enthalten...
Zufällige Zahlen in 2 Variablen
- Max1993
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
-
-
Danke! Sieht nicht schwer aus, aber an so ein goto hab ich nicht gedacht
-
so ist es schöner
Das mag sein, aber meins ist besser, da die Variablen nicht immer neu deklariert werden, sondern nur initialisiertmfg.
-
Das mag sein, aber meins ist besser, da die Variablen nicht immer neu deklariert werden, sondern nur initialisiert
indirekt wenn er es in den cmd reinmacht, dann machst du zugleich auch die deklairung neu
und das von mir ist das selbe nur kleiner -
indirekt wenn er es in den cmd reinmacht, dann machst du zugleich auch die deklairung neu
und das von mir ist das selbe nur kleiner
Nein, da bei dir durch das goto, die Variablen immer neu deklariert werden und das ist langsamer als meinsmfg.
-
Es zeugt von schlechtem Programmstil mit GOTO zu arbeiten, besser ist eine do while schleife:
Codenew rand1, rand2; do{ rand1 = random(6); rand2 = random(6); }while(rand1==rand2); Servervar1 = rand1; Servervar2 = rand2;
und wenn du noch ein Paar Nanosekunden Berechnung einsparen willst machst dus so: -
Es zeugt von schlechtem Programmstil mit GOTO zu arbeiten, besser ist deine do while schleife:
Also, da gebe ich dir vollkommen recht, goto ist extrem lahm, sogar lahmer als die do-while kombination, aber wenn man es schon richtig machen will, wieso dann nicht direkt mit nur einer while-Schleife ?mfg.
-
Das würde auch gehen ich hatte noch im Hinderkopf dass die do while mindestens einmal durchläuft im gegensatzu zur while aber in diesem fall geht aber auch eine whileschleife
-
-
Die do-while Schleife ist eine ideale Lösung, sie läuft genau so oft, wie sie laufen muss.
Wenn schon bei der ersten Ausführung des Do-Blocks die Zahlen nicht gleich sind,
löst die Wiederholung durch die Bedingung nach While einfach nicht aus. -
Ja jenach compiler könnte bei ner while Probleme auftreten da bei Deklaration beide Variabeln undefiniert also weder gleich noch unterschiedlich sind.
-
noch unterschiedlich sind.
Wir sind hier aber in Pawn und hier werden die Variablen wenn nichts angegeben wird mit dem Wert 0 initialisiert.mfg.
-
Die Whileschleife ist tatsächlich gefährlich.
Die do-while Schleife die Carlos vorgeführt hat hat dieses Problem nicht, darin liegt auch ihr
Vorteil gegenüber eine while SchleifeKaliber hat zwar insofern Recht dass der Code mit der while Schleife funktioniert, die do-while Lösung ist
allerdings eleganter -
ok,abgesehen von dieser do while sache funktioniert das Random(6) noch nicht richtig. Ich wollte ja Zahlen von 1-5, aber ich glaube, dass Random(6) die Zahl 0 auch als Möglichkeit enthält
Habe es bisher so:new rand1, rand2;
do{
rand1 = random(6);
rand2 = random(6);
}while(rand1==rand2);
Servervar1 = rand1;
Servervar2 = rand2; -
random(5)+1 sollte tun was du willst
Zahlen von 0-4, immer +1 -> Zahlen von 1-5 -
Ok, ein Problem habe ich doch noch...
Und zwar hätte ich gerne, dass bei der nächsten Ausführung des Commands die Variablen nicht wieder den vorherigen Wert annehmen können. Also wenn z.B. "Servervar1 = 3" wäre, soll es beim nächsten Durchlauf nicht wieder ein 3 sein können.
Habe es im Moment noch so: -
Kann ich weiterhelfen. . . soll die 3 in deinem Beispiel dann bei Servervar1 und Servervar2 gesperrt sein oder nur bei der variable in der sie war?
und was ist wenn alle 5 zahlen einmal aufgerufen wurden soll es dann von vorne anfangen? -
Bei beiden wär schon besser.
Bsp:
Servervar1 = 3, Servervar2 = 1
Im nächsten Durchlauf wären dann die Zahlen {1,3} gesperrt für beide Variablen jeweils.Ist das so möglich?
//Edit: Alle 5 Zahlen müssen nicht aufgerufen werden. Es sollten nur die vorherigen Zahlen fürs nächste mal gesperrt sein
-
//EDIT: Durch dein Edit erklärt sich meine frage, bin gleich fertig.
Codenew rand1, rand2,gesperrt[2]; do{ rand1 = random(5)+1 rand2 = random(5)+1 }while((rand1==rand2) || (rand1==gesperrt[0]) || (rand1==gesperrt[1]) || (rand2==gesperrt[0]) || (rand1==gesperrt[1])); gesperrt[0] = rand1; gesperrt[1] = rand2; Servervar1 = rand1; Servervar2 = rand2;
Wenn es einer besser kann oder Fehler findet darf mich gerne verbessern, ich weis aber nicht ob ich eine Do Whileschleife mit oder Bedingungen verknüpfen darf, musste das noch nie machen aber es spricht nichts dagegen.
Probieren geht über studieren.