Zufallszahlen/Buchstaben

  • VB.NET

Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    Zufallszahlen/Buchstaben

    Hallo Zusammen...

    Ich habe nun seit kurzer Zeit Informatik und gefallen am VB-Programmieren gefunden :)

    Ich habe mir nun einen Zufallsgenerator vorgenommen...der anfürsich anscheinend garnicht so schwierig zu programmieren war... Deshalb möchte ich nun das Ganze etwas abändern: Mein eigentlicher Code für den Botten war:

    VB.NET-Quellcode

    1. TextBox1.Clear()
    2. Dim rnd As New Random
    3. For i As Integer = 0 To 15
    4. If i = 4 Or i = 8 Or i = 12 Then TextBox1.Text &= "-"
    5. End If
    6. TextBox1.Text &= rnd.Next(0, 11)
    7. Next


    So... Jetzt würde ich nur gerne z.B. immer vorne (statt auch eine Zufallszahl) immer 4567 stehen haben... Leider habe ich selber keine Lösung gefunden und Herr Google wollte mir anscheinend keine Lösung zeigen...

    Weiß Jemand, wo ich den Code wie abändern muss dass z.B. vorne oder in der Mitte immer eine feste Zahl kommt?

    UND: Wie kann ich festlegen, dass immer nur 4 Zahlen zwischen dem "-" kommen? Denn mir wurde teilweise geholfen und jetzt hab ich keine Ahnung was geändert werden muss...



    Viele Grüße

    oldrock



    P.S.: Wenn jemand noch weitere "Einsteiger" Tipps hat, was leicht zuprogrammieren ist (was ich mal nachmachen sollte) bitte auch aufzählen ;)

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

    Willkommen im Forum. :thumbup:
    Gib bitte mal Deinem Projekt Option Strict On.
    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!
    Hi
    @Rod: Sollte nichts machen. Der &-Operator wird als String.Concat umgesetzt, daher können auch andere Objekte mit aufgenommen werden.
    @Topic:
    Wenn du dir das zutraust, kannst du statt dem String einen StringBuilder nehmen.

    VB.NET-Quellcode

    1. Dim builder As New System.Text.StringBuilder()
    2. builder.Append("4567")
    3. Dim rnd As New Random()
    4. Dim value As String
    5. For i As Integer = 0 To 15
    6. If i Mod 4 =0 Then builder.Append("-"c) ' '-'-Char anhaengen
    7. value = random.Next(0, 10000).ToString() 'ein- bis viertstellige Zahl
    8. 'Fuehrende Nullen anhaengen, um 4-Stelligkeit zu erzwingen und Value anhaengen
    9. builder.Append("0"c, 4 - value.Length).Append(value)
    10. Next
    11. 'Text generieren
    12. MessageBox.Show(builder.ToString())

    Der Unterschied zwischen einer &- Verknüpfung bei Strings und Append bei einem StringBuilder ist, dass Strings unveränderlich sind. Wenn du also String1 & String2 & String3 nacheinander kombinierst - innerhalb einer Zeile sollte es kein Problem sein -, wird mit jeder &-Operation ein neuer String erzeugt. Beim StringBuilder wird der String innerhalb des StringBuilder verwaltet und erst beim ToString()-Aufruf nach außen gegeben. Daher ist diese Restriktion beim StringBuilder nicht vorhanden.

    Wenn's für den Anfang noch zu viel ist, versuch' dich mal an folgendem:

    VB.NET-Quellcode

    1. Dim outp As String = "4567"
    2. Dim rnd As New Random()
    3. Dim value As String
    4. For i As Integer = 0 To 15
    5. If i Mod 4 =0 Then outp &= "-"c ' '-'-Char anhaengen
    6. value = random.Next(0, 10000).ToString() 'ein- bis viertstellige Zahl
    7. 'Fuehrende Nullen anhaengen, um 4-Stelligkeit zu erzwingen und Value anhaengen
    8. outp = New String("0"c, 4 - value.Length) & value
    9. Next
    10. 'Text ausgeben
    11. MessageBox.Show(outp)

    Es ist halt gängige Praxis, den StringBuilder bei sowas herzunehmen.
    Der Mod-Operator (modulo) gibt übrigens den Rest bei einer Division zurück. Also z.B. 5 Mod 2 = 1, 3 Mod 2 = 1, 6 Mod 4 = 2.
    Den Text weist man auch normalerweise erst zum Schluss der TextBox zu.

    //Zu spät.. ;)

    Gruß
    ~blaze~
    Okay... sieht einiges komplizierter aus ;) Aber trotzdem Danke ;)

    Nun habe ich schon etliches "weiteres" mit diesem neuen Code ausprobiert... Nun hatte ich die Idee, die feste Zahl z.B. in die Mitte zusetzen ;)) Was mache ich dann? Oder (das scheint kniffeliger zusein) erst z.B. die "feste" "1234" und dann wie immer das "-" und dann aber nur 1 feste Nummer sagen wir "5" und danach sollen 3 weitere Zahlen zufällig erscheinen :D Mein Test war ein Fehlschlag :(

    Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. TextBox1.Text = "1234-5"
    3. Dim rnd As New RandomFor i As Integer = 0 To 11
    4. If i Mod 4 = 0 Then TextBox1.Text &= "-"
    5. TextBox1.Text &= rnd.Next(0, 10)
    6. NextEnd Sub


    Dann dann kommt soetwas raus: 1234-5-1485...
    Und wie kann ich die länge meiner Zahlen kette festlegen (also insgesamt sag ich jetzt mal 13 Zahlen/ Zeichen oder nur 5 ...) Und wieviele in einem "-" abschnitt sein sollen?
    Gruß
    oldrock

    P.S.: Kann ich auch einfach zufällige Buchstaben von A-Z oder Zeichen wie ? oder ! generieren lassen? :)
    Die Länge deiner Zeichenkette (ohne die "-") ist die Zahl hinter dem "To" + 1 und + der Länge des Anfangsstrings. Die Anzahl der Zahlen pro Abschnitt steht hinter dem "Mod".
    Die Lösung für dein Vorhaben würde dann so aussehen:

    VB.NET-Quellcode

    1. TextBox1.Text = "1234"
    2. Dim rnd As New Random
    3. For i As Integer = 0 To 8
    4. If i Mod 3 = 0 Then TextBox1.Text &= "-5"
    5. TextBox1.Text &= rnd.Next(0,10)
    6. Next


    Edit:
    Wenn du statt Zahlen auch Buchstaben verwenden willst musst du die vorletzte Zeile durch diesen Code ersetzen:

    VB.NET-Quellcode

    1. Dim letters As String = "abcdefghijklmnopqrstuvwxyz1234567890"
    2. TextBox1.Text &= letters.Chars(rnd.Next(0,letters.Length))

    Der Code speichert alle Zeichen, die du haben willst in einer Variablen. Dann wird eine Zufallszahl zwischen 0 und der Länge des Textes (Anzahl aller Zeichen) gebildet. Das Zeichen an der Position dieser Zahl wird der Textbox hinzugefügt.

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

    UIII heute werd ich noch schlau :D :D

    So... das oben hat schon super geklappt aber was ist bei :

    VB.NET-Quellcode

    1. TextBox1.Text = "1234"
    2. Dim rnd As New Random
    3. For i As Integer = 0 To 8 If i Mod 3 = 0 Then TextBox1.Text &= "-5"
    4. TextBox1.Text &= rnd.Next(0,10)
    5. Next


    Aber jetzt möchte ich nicht das vor jeder nachfolgenden Zahl eine solche "5" kommt sondern sagen wir nur in der letzten ;)

    Dann müsste ich den Befehl ja so ändern, dass sich die "5" nur auf die letzte "-...." Spalte bezieht (oder wo sie hinsoll...)



    Ja, ich weiss, ich bin nervend... (Naja... aber immerhin lerne ich etwas ;) )

    Gruß

    oldrock
    Das wirst du dann wohl oder übel fest in den Code schreiben müssen:

    VB.NET-Quellcode

    1. TextBox1.Text = "1234"
    2. Dim rnd As New Random
    3. For i As Integer = 0 To 10
    4. If i Mod 4 = 0 Then TextBox1.Text &= "-"
    5. if i = 8 Then TextBox1.Text &= "5"
    6. TextBox1.Text &= rnd.Next(0,10)
    7. Next
    Super :D GUUT... Dann haben wir nurnoch das Prblem dass ich wenn ich z.B.:

    VB.NET-Quellcode

    1. TextBox1.Text = "1234"
    2. Dim rnd As New Random
    3. For i As Integer = 0 To 10
    4. If i Mod 4 = 0 Then TextBox1.Text &= "-"
    5. If i = 0 Then TextBox1.Text &= "5"
    6. TextBox1.Text &= rnd.Next(0,10) Next


    schreibe hinterher bei den generieten Zahlen 5 statt nur 4 Zahlen hab... Die "5" wird zu den 4 anderen einfach dazugeschoben...

    ;)

    Gruß

    oldrock

    DaNKE AN ALLE!

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

    Ja, die Variante die ich gewählt habe funktioniert nur beim letzten Zahlenblock. Wenn du es in einem beliebigen Block haben willst, dann wird die Funktion gleich um einiges komplizierter:

    VB.NET-Quellcode

    1. TextBox1.Text = "1234"
    2. Dim rnd As New Random
    3. Dim blockSize As Integer = 4
    4. Dim numberCount As Integer = 12
    5. Dim replaceIndex As Integer = 0
    6. Dim replaceNumber As Integer = 1
    7. Dim i As Integer = 0
    8. Do While i < numberCount
    9. If i Mod 4 = 0 Then TextBox1.Text &= "-"
    10. If i = replaceIndex Then
    11. TextBox1.Text &= replaceNumber
    12. i += 1
    13. Continue Do
    14. End If
    15. TextBox1.Text &= rnd.Next(0, 10)
    16. i += 1
    17. Loop

    Dabei sind blockSize die Anzahl Ziffern zwischen zwei "-", numberCount die Gesamtzahl Ziffern ohne die "-", replaceIndex der Index des festen Zeichens und replaceNumber die Zahl, die dort eingesetzt werden soll.

    oldrock schrieb:

    UIII heute werd ich noch schlau

    hmm - aber für Bitte VB-Tag benutzen - aber richtig reichts denn doch nicht :(

    jaja, ich gehe auf die Nerven, aber ich finds im Grunde Nehmer-Mentalität und 'ne Respektlosigkeit, dass du, wenn du Fragen hast, dir nichtmal 5min Zeit nimmst, um zu lernen, wie du deinen Code in lesbarer Form einstellen kannst.

    ~blaze~ schrieb:

    @Rod: Sollte nichts machen.
    Hab ich gerade ausprobiert,

    VB.NET-Quellcode

    1. TextBox1.Text &= rnd.Next(0, 10)
    funktioniert auch mit Option strict On. ;(
    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!

    SpaceyX schrieb:

    Hast Du da ne Erklärung dafür?

    VB.NET-Quellcode

    1. Dim txt As String = ""
    2. txt &= 5
    funktioniert auch, gerade probiert.
    Bilder
    • String.png

      3,87 kB, 212×82, 1.463 mal angesehen
    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!