5 Strings zufällig miteinander kombinieren

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    5 Strings zufällig miteinander kombinieren

    Hallo zusammen,

    ich möchte 5 verschiedene Strings zufällig miteinander kombinieren (25 verschiedene Ergebnisse ?).

    Bisher habe ich es einfach mit einem Random und einer sehr langen "If-Abfrage" gelöst, die eben diese 25 "Elseif"s beinhaltet.

    Kann man das auch schöner und kürzer regeln?

    VG

    whatever schrieb:

    5 verschiedene Strings zufällig miteinander kombinieren


    Jo. Ich finde die Frage so ziemlich verwirrend und unverständlich.
    @whatever könntest du bitte ein Beispiel angeben, wie die 5 Strings Anfangs und wie sie am Schluss aussehen sollen.

    Freundliche Grüsse

    exc-jdbi
    Neptuns Möglichkeit klappt für mich ganz gut. Danke!

    Die Strings sehen so aus:
    Input (Array): Test1, Test2, Test3, Test4, Test5
    Output (String) zB.: Test3 Test5 Test1 Test2 Test4

    Die Strings dürfen im Ergebnis auch nur einmal vorkommen, sich also nicht wiederholen.

    whatever schrieb:

    Output (String) zB.:
    ist etwas mau.
    Wie viele dieser Dinger erwartest Du?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @whatever AHa.
    Vielleicht scheibst Du nun mal ne belastbare Aufgabenstellung:
    Wieviele Strings hast Du zur Auswahl?
    Wie oft wird (5 aus n) gespielt?
    Klingt wie Lotto, die Lösung dafür findest Du im INet...
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Habs mal in Minimalform nachgebaut :thumbsup:

    Edit: Code ist jetzt 100% .NET

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Public Class Form1
    4. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. Me.Size = New Size(400, 30)
    6. Dim intMaxZiehungen As Integer = 5
    7. Dim intSelectedString(intMaxZiehungen - 1) As Integer
    8. Dim strArray() As String = {"0cut", _
    9. "Test1", "Test2", "Test3", "Test4", "Test5", "Test6", "Test7", "Test8", "Test9", "Test10", _
    10. "Test11", "Test12", "Test13", "Test14", "Test15", "Test16", "Test17", "Test18", "Test19", _
    11. "Test20", "Test21", "Test22", "Test23", "Test24", "Test25"}
    12. Dim _Rnd As Random = New Random()
    13. Dim strAusgabe As String = ""
    14. Dim intZiehungsdummy As Integer = 0
    15. For i As Integer = 0 To intMaxZiehungen - 1
    16. NochmalVersuchen:
    17. intZiehungsdummy = CInt(_Rnd.Next(strArray.Count))
    18. If intSelectedString.Contains(intZiehungsdummy) Then GoTo NochmalVersuchen
    19. intSelectedString(i) = intZiehungsdummy
    20. strAusgabe &= strArray(intSelectedString(i)) & " "
    21. Next
    22. Me.Text = strAusgabe
    23. End Sub
    24. End Class


    Und eine Version für @RodFromGermany ;)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Public Class Form1
    4. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. Me.Size = New Size(400, 30)
    6. Dim intMaxZiehungen As Integer = 5
    7. Dim intSelectedString(intMaxZiehungen - 1) As Integer
    8. Dim strArray() As String = {"0cut", _
    9. "Test1", "Test2", "Test3", "Test4", "Test5", "Test6", "Test7", "Test8", "Test9", "Test10", _
    10. "Test11", "Test12", "Test13", "Test14", "Test15", "Test16", "Test17", "Test18", "Test19", _
    11. "Test20", "Test21", "Test22", "Test23", "Test24", "Test25"}
    12. Dim _Rnd As Random = New Random()
    13. Dim strAusgabe As String = ""
    14. Dim intZiehungsdummy As Integer = 0
    15. Dim i As Integer = intMaxZiehungen - 1
    16. Do While i > -1
    17. NochmalVersuchen:
    18. intZiehungsdummy = CInt(_Rnd.Next(strArray.Count))
    19. If intSelectedString.Contains(intZiehungsdummy) Then GoTo NochmalVersuchen
    20. intSelectedString(i) = intZiehungsdummy
    21. strAusgabe &= strArray(intSelectedString(i)) & " "
    22. i -= 1
    23. Loop
    24. Me.Text = strAusgabe
    25. End Sub
    26. End Class

    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Steppenpferd“ ()

    @Steppenpferd:
    Hi - kann ich dir mal Visual Studio - Empfohlene Einstellungen empfehlen, insbesondere den vb6-Namespace ein für allemal rauszuwerfen?
    Weil Randomize() und Rnd() ist olles vb6-Zeugs, und steht dir im Wege, die heutzutage für Zufallszahlen vorgesehene Infrastruktur zu nutzen.

    Aber nachwievor fehlt die belastbare Aufgabenstellung - ist also eher kontraproduktiv, Codesnippets anzugeben, die dann lösen, was u.U. garnet gefragt war, bzw. höchstens zufällig das treffen können, was zu fragen vlt. gewollt war, aber nicht gefragt wurde.
    Jo, nach belastbare Aufgabenstellung, bzw. überhaupt nach dem beabsichtigten Anwendungszweck frug ich ja schon in post#2, aber wenns dem TE gefällt, uns tagelang zu beschäftigen ohne voran zu kommen, muss man ihn halt machen lassen (und mitspielen oder nicht).

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @Steppenpferd
    Ich muss es aber trotzdem hinschreiben.

    Da wär mir aber die Mischfunktion von @ErfinderDesRades sympathischer. Siehe hier Listbox Items zufällig mixen

    Muss einfach ein bisschen angepasst werden.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Imports ArrayShuffel.HelpersEDR
    4. Imports System.Runtime.CompilerServices
    5. Public Module Module1
    6. Public Sub Main()
    7. Bsp1()
    8. End Sub
    9. Public Sub Bsp1()
    10. Dim s = {"Test1", "Test2", "Test3", "Test4", "Test5",
    11. "Test6", "Test7", "Test8", "Test9", "Test10"}
    12. Dim srnd = s.ToArray ' CopyStringArray(s)
    13. srnd.ShuffelArray
    14. Dim res = srnd.ArrayToString
    15. Stop
    16. End Sub
    17. Private Function CopyStringArray(s() As String) As String()
    18. Dim res = New String(s.Length - 1) {}
    19. Array.Copy(s, res, s.Length)
    20. Return res
    21. End Function
    22. End Module
    23. Public Module HelpersEDR
    24. Private _Rnd As New Random
    25. <Extension(), DebuggerStepThrough()>
    26. Public Sub ShuffelArray(Of T As Class)(ByRef itms() As T, Optional seed As Int32 = -1)
    27. If itms IsNot Nothing AndAlso itms.Length > 0 Then
    28. If seed >= 0 Then _Rnd = New Random(seed)
    29. Dim inc As Int32 = itms.Length, tt As Int32, tmp As T
    30. While inc > 0
    31. inc -= 1
    32. tt = _Rnd.Next(inc + 1)
    33. tmp = itms(inc)
    34. itms(inc) = itms(tt)
    35. itms(tt) = tmp
    36. End While
    37. End If
    38. End Sub
    39. Extension(), DebuggerStepThrough()>
    40. Public Function ArrayToString(Of T)(itms() As T) As String
    41. Return String.Join(" ", itms).ToArray
    42. End Function
    43. End Module


    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „exc-jdbi“ ()

    exc-jdbi schrieb:

    VB.NET-Quellcode

    1. While inc > 0
    Das schreit doch nach einer For-Schleife.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @ErfinderDesRades erst mal danke für den Link auf die Empfohlene Einstellungen. Werde mich jetzt Definitiv, mal wieder, damit auseinander setzen.
    Der VB6-Namespace nervt mich selbst, da ich mich nur langsam aber sicher von VB6 in richtung reines vb.NET bewege.
    Ich hab mir damals VS2012 als ungelernter VB6-Programmierer gekauft. Es war wirklich der Hammer bis ich erst mal halbwegs mit der neuen IDE umgehen konnte und ich bin mir sicher das ich Heute noch nicht mal 10% des gesammten Potenzials der Entwicklungsumgebung nutze.
    Nachdem ich mich halbwegs durch ausprobieren und murksen in der IDE zurechtgefunden hatte, hab ich mich dazu entschlossen mal an "Empfohlene Einstellungen" zu gehen.
    Das war damals ein riesen Fehler das mich mindestens eine Woche Datensicherung und Neuinstallation gekostet hat. Seit dem hab ganz einfach die Finger davon gelassen.

    @ALL verzeiht mir bitte das ich mir Gestern einen über den Durst getrunken habe und nach dem versuch eine schnellere Routine (als die Empfohlene, nützlich empfundene) zu schreiben, diese auch noch gepostet hab. Aber keine Angst, das kommt bei mir eher selten vor^^
    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)
    Kannst auch mal dieses angugge, da habich einen Haufen zusammengestellt, was man über kurz oder lang lernen muss/wird:
    Datenverarbeitungs-Vorraussetzungen
    Davon ist zum Thema IDE dieses wohl das interessanteste: VisualStudio richtig nutzen (Google ist nicht deine Mami)

    Aber an den anneren Sachen geht eiglich auch kein Weg dran vorbei.
    DIES HIER GEHÖRT NICHT ZUM EIGENDLICHEN THEMA UND KANN GETROST BEIM LESEN ÜBERSPRUNGEN WERDEN

    @ErfinderDesRades Ich arbeite mich grade durch: Visual Studio - Empfohlene Einstellungen
    Dort hätte ich dem Ersteller der Threads gerne eine Private Nachricht geschickt um ihm eine Ergänzung vorzuschlagen.
    Ist das hier im Forum überhaupt möglich? Denn ich finde keine Option um dies zu tun.
    Er schrieb dort:
    In der Standard-Einstellung erlaubt es VB.NET tatsächlich, daß ein String (definiert durch "") als Zahl gesehen wird. In C# würde dies zu einem Compiler-Fehler führen und das Programm würde nicht starten.

    Ich kann dazu aus Erfahrung sagen, das nur in der eigenen Entwicklungsumgebung keine Fehler ausgelöst werden. Sobald man aber vor hat die *.exe an Freunde weiter zu geben, wird spätestens dort der Fehler ausgelöst. Ob das jetzt im Beispiel mit dem String auch so ist kann ich grad nicht genau sagen, aber beim füllen von Integer mit Double mit Sicherheit.
    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)