Alle Kombinationen durch rotieren

kjh

Erfahrenes Mitglied
Guten Zusammen,

ein kleines Denkproblem.

Ich hab eine Maske mit 3 Textfelder. Jetzt möchte ich alle Möglichkeiten die es gibt die Textfelder hintereinander ausgeben.

z.b.
lbList.Items.Add(var1 + var2 + var3)
lbList.Items.Add(var2 + var1 + var3) usw.

Irgendwie muss es doch ne Möglichkeit geben das in einer Schleife zu lösen?

Ideen?

Danke!

kjh
 
Bei 3 Variablen gibt es nur 6 verschiedene Möglichkeiten, richtig? Da ist es wesentlich schneller die 6 Möglichkeiten per Hand einzutippen. Selbst bei 4 Variablen und somit 24 Möglichkeiten bist du per Hand immer noch schneller. Ab 5 Variablen wird eine Code-Schleife sicherlich interessant.
Was ist denn dein Ziel an der Sache?
Da die Sache aber interessant klingt, werde ich mich mal dran versuchen :-)
 
Lösungsvorschlag

Okay, ich habe mir folgendes überlegt (dabei ist es egal, ob du nur 3 oder beliebig viele Variablen verwenden möchtest):

n sei die Anzahl der Elemente, die du untereinander kombinieren möchtest (bei dir sozusagen die Anzahl der Textboxen)

a sei die Anzahl der möglichen Kombinationen. Aus Mathe wissen wir noch: a=n! (! für Fakultät)

Zuerst erstellen wir uns ein Array mit n Elementen. Dieses soll eine Anordnung der n Elemente darstellen. Da wir von diesem Array insgesamt a Stück brauchen, bastelst du dir am sinnvollsten eine Klasse (so hab ich das jedenfalls gemacht) und erstellst dann a Objekte von dieser Klasse. Ich habe die Klasse mal "Kombination" genannt.

Nun machen wir mit den Kombination-Objekten folgendes:
wir schreiben in jedes Kombination-Objekt den Buchstaben A, wobei wir bei jedem Objekt ein anderes Element aus dem Array wählen. Wenn alle Elemente einmal verwendet worden sind, dann fangen wir wieder bei dem 1. Element an.

Dann machen wir das ganze nochmal mit allen Kombination-Objekten und dem Buchstaben B, müssen aber aufpassen, dass wir nicht einen Platz wo bereits ein A steht mit B überschreiben.

Ich versuche mal das als Code zu beschreiben:
Du baust zuerst eine Schleife, die von 1 bis n geht.
Dann sollte in dieser Schleife eine Variable existieren, die in Buchstaben hochzählt ("A", dann im nächsten Schleifendurchlauf "B", dann "C", usw)
Diese Buchstaben sollen jeweils ein Element repräsentieren, das wir auf die Kombination-Array-Plätze verteilen wollen.

Dann ist in dieser "äußeren" Schleife noch eine weitere "innere" Schleife enthalten, die von 1 bis a geht. Den Schleifen-Zähler bezeichne ich mal mit x
In dieser inneren Schleife machst du nun mit jedem Kombination-Array folgendes:
Du suchst im a-ten Array nach dem x-ten freien Platz. Wenn du diesen Platz gefunden hast, dann schreibst du da den Buchstaben rein (welcher in der äußeren Schleife hochgezählt wird).
Mit "freiem Platz" meine ich das Array-Element, in dem noch kein Buchstabe drin steht.
Das war es auch schon.
Nun brauchst du bloß noch die Inhalte aller Arrays irgendwo hinzuschreiben.

Kapierst du das? Ich hab's in VB.Net programmiert, willst du den Code trotzdem sehen?
 
Zurück