Antworten auf deine Fragen:
Neues Thema erstellen

Variablen-Frage an die Profis...

factory68

Noch nicht viel geschrieben

Hallo zusammen.
Ich stecke in einer kleinen Problematik fest. Vielleicht kann
mir hier jemand weiter helfen. Allgemeine Infos via google
usw. haben nicht wirklich geholfen ;-) ...

Kurz zum Sachverhalt.
Ich möchte 10 Variablen ausgeben lassen und jede hat einen
zufälligen Wert zwischen 1 und 25, d.h. z.B. es wird wie folgt
ausgegeben:

Zufall1=25;
Zufall2=3;
Zufall3=14;
Zufall4=2;
Zufall5=6;
Zufall6=8;
Zufall7=1;
Zufall8=20;
Zufall9=19;
Zufall10=9;

Werte sollen nicht doppelt vergeben werden. Soweit kein
Problem. Das habe ich alles ganz gut hin bekommen.
Jetzt zur problematischen Stelle:

Die Variablen werden getrennt in "normale" und "sortierte".
Es sollen keine "sortierten" Variablen hintereinander erschei-
nen. D.h. ich habe z.B. eine Liste mit 10 Zahlen, z.B.
2,6,7,14,15,16,17,18,19,20., diese sollen in der Reihenfolge
der "Zufall"-Variablen nicht hintereinander erscheinen.
Im Beispiel wären Zufall4 und Zufall5 somit verkehrt bzw.
sowas sollte vermieden werden.

Jetzt meine Frage. Wie kann ich meine Zufallsabfrage am
besten umsetzen, sodass jede Zufallsvariable einen zufälligen
Wert bekommt, aber die "sortierten" nie hinter einander stehen?

Hintergrund ist eine Bilderserie, die zufällig erstellt wird, in
der aber spezielle Bilder nicht hintereinander stehen dürfen.

Vielleicht hat ja jemand eine Idee oder einen Ansatzpunkt
für dieses Problem...
 

h_seldon

Aktives Mitglied

AW: Variablen-Frage an die Profis...

Hallo,

vielleicht irgendwie so etwas:

PHP:
//max Anzahl Zufallswerte
var nMaxZufall:Number = 25;
//Hilfsmittel, um unelegant, aber einfach zulässige Zufallswerte zu ermitteln 
var aMoeglichZufall:Array = [];
//enthält die eigentlichen Zufallswerte
var aZufall:Array = [];
//Reihenfolge, die nicht auftreten darf
var aReihenfolge:Array = [2, 6, 7, 14, 15, 16, 17, 18, 19, 20, 21];
//anzahl der gewünschten Zufallswerte
var nZufallAnzahl:Number = 10;
//Hilfsarray gefüllt mit allen zulässigen Werten
for (var i:Number = 1; i<=nMaxZufall; i++) {
	aMoeglichZufall.push(i);
}
//dies und das
for (i=0; i<nZufallAnzahl; i++) {
//Zufallszahl zwischen 0 und Gesamtlänge des Hilfsarrays
//wird als Indexzugriff auf das Array der zulässigen Werte verwendet
//stellt nicht selbst die Zufallszahl dar!
	var nNum:Number = Math.floor(Math.random()*aMoeglichZufall.length);
//ab dem zweiten Zufallswert kann es eine verbotene Reihenfolge geben
	if (i>1) {
//dann müssen wir aMoeglichZufall[nNum] mit der verbotenen Reihenfolge //vergleichen
	for (var j:Number = 1; j<aReihenfolge.length; j++) {
//sind beide Werte gleich ...
			if (aMoeglichZufall[nNum] == aReihenfolge[j]) {
// ... schauen wir nach, ob der zuvor gespeicherte Wert
//in der verbotenen Reihenfolge an der aktuellen Stelle - 1 auftaucht
				if (aZufall[i-1] == aReihenfolge[j-1]) {
//testweise eingefügt, um per trace kontrollieren zu können
					var nDoppelt:Number = aZufall[i-1];
					trace("vorher: "+nDoppelt+", "+aMoeglichZufall[nNum]);
//solange der aktuelle ermittelte Wert in der verbotenen Reihenfolge enthalten
					while (aMoeglichZufall[nNum] == aReihenfolge[j]) {
//wird neuer Zufallswert für den Indexzugriff ermittelt
						nNum = Math.floor(Math.random()*aMoeglichZufall.length);
					}
//zur Kontrolle
					trace("nachher: "+nDoppelt+", "+aMoeglichZufall[nNum]);					
				}
			}
		}
	}
//nun können wir den gefundenen Wert in das Array mit den Zufallszahlen 
//eintragen und ihn gleichzeitig aus dem Array mit den möglichen
//Werten löschen, so dass er nicht erneut ermittelt wird
	aZufall.push(aMoeglichZufall[nNum]);
	aMoeglichZufall.splice(nNum, 1);
}
//zur Kontrolle
trace(aReihenfolge);
trace(aZufall);
trace("-----------------");

Das ist zugegebenermaßen unsauber und unelegant (z.B. bricht die Schleife nach der Ermittlung innerhalb von while nicht nach dem Finden eines korrekten Wertes ab, die Zufallszahlen könnten hübscher auf doppelte Zahlen kontrolliert werden etc.), aber es müsste eigentlich klappen. Wäre das, was mir spontan einfällt ...


Viel Spass
 

factory68

Noch nicht viel geschrieben

AW: Variablen-Frage an die Profis...

hey, hallo,...
cool. danke für den tipp. ich habe eine
ähnliche variante daraus erstellt. ein
paar bedingungen kamen noch hinzu.
jetzt funktioniert's aber ganz gut. vielen
dank...
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.615
Beiträge
1.538.352
Mitglieder
67.526
Neuestes Mitglied
Winfriedtesmer
Oben