Hallo liebe VBParadise-Gemeinde!
ich möchste mit folgendem Code rekursiv alle Kombinationsmöglichkeiten von den Items in der Übergebenen Liste ls bestimmen. Dh, wenn die liste die Items A, B, C, D enthält, soll zunächst per Messagebox ABCD, ABDC, ACBD, BCDA, ... angezeigt werden. Leider klappt das nicht so ganz
Hier mein Code:
ls ist dabei wie gesagt immer die Liste mit den Items die Kombiniert werden sollen. Zunächst überprüfe ich, ob diese Liste leer ist, wenn ja, so sind alle Items in der Liste aufgebraucht und damit in der Liste kombination gespeichert und diese kann ausgegeben werden. Dann wird jedes Item der Liste durchgegangen und eine neue Liste nls erstellt, die das jeweilige Element nicht enthält, dafür aber kombination. Dann wird rekursiv der nächste Kombinationsvorgang aufgerufen (ich hoffe ich konnte meine Gedanken verständlich machen).
Leider bricht die Prozedur immer mit folgender Fehlermeldung bei der Next-Anweisung ab:
Aber es wurde die ls-Liste doch gar nicht geändert? oO
Hoffe ihr könnt mir helfen. LG
ich möchste mit folgendem Code rekursiv alle Kombinationsmöglichkeiten von den Items in der Übergebenen Liste ls bestimmen. Dh, wenn die liste die Items A, B, C, D enthält, soll zunächst per Messagebox ABCD, ABDC, ACBD, BCDA, ... angezeigt werden. Leider klappt das nicht so ganz
Hier mein Code:
VB.NET-Quellcode
- Sub Kombination_Rekursiv(ByVal ls As List(Of String), ByVal kombination As List(Of String))
- If ls.Count = 0 Then
- MsgBox(String.Join(" ", kombination.ToArray))
- Exit Sub
- End If
- For Each i As String In ls
- Dim nls As List(Of String) = ls
- nls.Remove(i)
- kombination.Add(i)
- Kombination_Rekursiv(nls, kombination)
- Next
- End Sub
ls ist dabei wie gesagt immer die Liste mit den Items die Kombiniert werden sollen. Zunächst überprüfe ich, ob diese Liste leer ist, wenn ja, so sind alle Items in der Liste aufgebraucht und damit in der Liste kombination gespeichert und diese kann ausgegeben werden. Dann wird jedes Item der Liste durchgegangen und eine neue Liste nls erstellt, die das jeweilige Element nicht enthält, dafür aber kombination. Dann wird rekursiv der nächste Kombinationsvorgang aufgerufen (ich hoffe ich konnte meine Gedanken verständlich machen).
Leider bricht die Prozedur immer mit folgender Fehlermeldung bei der Next-Anweisung ab:
System.InvalidOperationException wurde nicht behandelt.
Message="Die Auflistung wurde geändert. Der Enumerationsvorgang kann möglicherweise nicht ausgeführt werden."
Aber es wurde die ls-Liste doch gar nicht geändert? oO
Hoffe ihr könnt mir helfen. LG
--- Zurzeit inaktiv ---