Zahlenraten

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von thedarkside21986.

    Zahlenraten

    hi,

    es gibt zwar jede Menge dieser Programme. allerdings hab ich keines gefunden in dem die Eingaben gespeichert werden.
    Nun soll das Programm die Eingabe von bis zu 5 Zahlen erwarten. Nach jeder Eingabe sollen
    die bisher geratenen Zahlen sowie die Angabe, ob die gesuchte Zahl größer oder kleiner ist,
    angezeigt werden. Wird die Zahl erraten oder sind die 5 Versuche vorbei, soll eine Abfrage
    kommen, ob man noch einmal spielen oder das Programm beenden möchte.
    Beispiel:
    Bitte geben Sie eine Zahl zwischen 1 und 20 ein: 15
    Die gesuchte Zahl ist kleiner!
    Bisherige Zahlen: 9 15

    VB.NET-Quellcode

    1. Imports System.Console
    2. Module Module1
    3. Dim Zufallszahl As Integer
    4. Dim zahlen As New ArrayList
    5. Dim count As Int32 = 0
    6. Dim Zahl As Integer
    7. Dim Antwort As String
    8. Sub Main()
    9. Randomize(Timer)
    10. Zufallszahl = 1 + Int(Rnd(1) * 20)
    11. WriteLine("Bitte geben Sie die gesuchte Zahl ein")
    12. Zahl = ReadLine()
    13. For z = 1 To 5
    14. Try
    15. zahlen.Add(Int32.Parse(Zahl))
    16. Catch ex As FormatException
    17. If Not IsNumeric(zahlen) Then WriteLine("Bitte geben Sie eine gültige Zahl ein")
    18. WriteLine()
    19. End Try
    20. Select Case Zahl
    21. Case Is < Zufallszahl
    22. WriteLine("Gesuchté Zahl ist größer")
    23. WriteLine(z)
    24. Case Is > Zufallszahl
    25. WriteLine("Gesuchte Zahl ist kleiner")
    26. Case Else
    27. WriteLine("Richtig geraten")
    28. ReadLine()
    29. WriteLine("Neues Spiel? ...... ja oder nein?")
    30. Antwort = ReadLine()
    31. Select Case Antwort
    32. Case "ja"
    33. WriteLine()
    34. WriteLine()
    35. Main()
    36. Case "nein"
    37. Exit Sub
    38. Case Else
    39. WriteLine("Nur Eingabe ja und nein zulässig")
    40. End Select
    41. End Select
    42. Exit Sub
    43. ' Antwort = ReadLine()
    44. 'Select Case Antwort
    45. ' Case "ja"
    46. 'Main()
    47. ' Case "nein"
    48. 'Exit Sub
    49. ' Case Else
    50. 'WriteLine("Nur Eingabe ja und nein zulässig")
    51. 'End Select
    52. WriteLine()
    53. Next
    54. End Sub
    55. Function Prüfe(ByVal Zahleingaben As Integer) As Boolean
    56. End Function
    57. End Module


    ohne der Ausgabe - der bereits eingegeben Zahlen also wenn man den Befehl zahlen.Add(Int32.Parse(Zahl)) weglässt funktioniert das Programm.
    aber wie bekomme ich das mit der Ausgabe der bereits eingegeben Zahlen hin.

    zahlen.Add(Int32.Parse(Readline())) hab ich auch schon probiert. bringt mir auch keine andere Lösung.

    Bitte um Hilfe.
    In deiner VB-Umgebung hast du den Menüpunkt Einzelschritt. Dort kannst du Schritt für Schritt schauen, was dein Programm macht (das gilt auch für deinen anderen Thread). Zeile 14, 15: VB6-Anweisungen. Funktionieren zwar, sind aber nur mehr aus Kompatibilität dabei. Die Random-Klasse wird in diesem Forum zu Hauff erwähnt.

    aber wie bekomme ich das mit der Ausgabe der bereits eingegeben Zahlen hin.

    Wenn du eine Auflistung hast, dann hilft dir die For-Each-Anweisung weiter. Diese geht in einer Schleife jedes Element durch.

    der_Kurt schrieb:

    In deiner VB-Umgebung hast du den Menüpunkt Einzelschritt. Dort kannst du Schritt für Schritt schauen, was dein Programm macht (das gilt auch für deinen anderen Thread). Zeile 14, 15: VB6-Anweisungen. Funktionieren zwar, sind aber nur mehr aus Kompatibilität dabei. Die Random-Klasse wird in diesem Forum zu Hauff erwähnt.

    aber wie bekomme ich das mit der Ausgabe der bereits eingegeben Zahlen hin.

    Wenn du eine Auflistung hast, dann hilft dir die For-Each-Anweisung weiter. Diese geht in einer Schleife jedes Element durch.
    hallo die for each Schleife kenne ich schon ... (die gilt wenn die anzahl der Arrays unbestimmt ist)
    wenn ich aber sage ich hab ein festes Array von 5 Werten dann kann ich doch auch die
    for i = 1 to Myarray.Length verwenden oder ?
    Hallo,

    auch für einen normalen Array mit fester größe kannst du eine ForEach Schleife nehmen, außerdem wäre es eher For i = 0 To Myarray.length -1

    Mfg jvbsl
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ich hab das mal umgesetzt, das was du wolltest.

    Ist es so, wie du es haben wolltest? Hast du Fragen zum Code? Gern melden.

    VB.NET-Quellcode

    1. Module Zahlenraten
    2. Public bisher As New List(Of Integer)
    3. Public eingabe As String = String.Empty
    4. Sub Main()
    5. bisher.Clear()
    6. Dim zufallszahl As Integer = New Random().Next(1, 20)
    7. Dim eingegeben As String = String.Empty
    8. ZahlAbfangen()
    9. Dim counter As Integer = 1
    10. Do
    11. bisher.Add(Integer.Parse(eingabe))
    12. eingegeben = EingegebeneZahlen()
    13. Select Case Integer.Parse(eingabe)
    14. Case Is < zufallszahl
    15. Console.WriteLine("Die gesuchte Zahl ist größer.")
    16. Console.WriteLine("Bisher folgende Zahlen benutzt: {0} - {1}. Versuch", eingegeben, counter)
    17. ZahlAbfangen()
    18. Case Is > zufallszahl
    19. Console.WriteLine("Die gesuchte Zahl ist kleiner.")
    20. Console.WriteLine("Bisher folgende Zahlen benutzt: {0} - {1}. Versuch", eingegeben, counter)
    21. ZahlAbfangen()
    22. Case Else
    23. Console.WriteLine("Richtig, die Zahl lautete {0} und Sie haben {1} Versuche gebraucht!", zufallszahl, counter)
    24. Abfragen()
    25. Exit Do
    26. End Select
    27. counter += 1
    28. Loop Until counter = 5
    29. Console.WriteLine("Sie haben leider all ihre Versuche verbraucht! Die Zahl lautete {0}.", zufallszahl)
    30. Abfragen()
    31. End Sub
    32. Private Function EingegebeneZahlen() As String
    33. Dim _zahlen As String = String.Empty
    34. For i As Integer = 0 To bisher.Count - 1
    35. _zahlen &= bisher(i).ToString() + ", "
    36. Next
    37. Return _zahlen.Remove(_zahlen.Length - 2, 2)
    38. End Function
    39. Private Sub Abfragen()
    40. Console.Write("Möchten Sie nochmal spielen? (Y|N): ")
    41. Dim antwort As String = Console.ReadLine()
    42. Do Until antwort.ToLower() = "y" Or antwort.ToLower() = "n"
    43. Console.Write("Falsche Eingabe - (Y|N): ")
    44. antwort = Console.ReadLine()
    45. Loop
    46. Select Case antwort.ToLower()
    47. Case "y"
    48. Main()
    49. Case Else
    50. End Select
    51. End Sub
    52. Private Sub ZahlAbfangen()
    53. Console.Write("Geben Sie die gesuchte Zahl ein: ")
    54. eingabe = Console.ReadLine()
    55. Do Until Integer.TryParse(eingabe, 0)
    56. Console.Write("Das war keine Zahl, bitte neu eingeben: ")
    57. eingabe = Console.ReadLine()
    58. Loop
    59. End Sub
    60. End Module


    MfG
    hi lapi. super herzlichen Dank für die Ausarbeitung. Ich wollte zwar keinen fertigen code aber trotzdem danke.
    ich muss jetzt suchen ob ich deine Vorlage mit einbauen kann.
    mein Gerüst sieht nun so aus....
    was mir noch fehlt die Ausgabe der bereits eingegeben Zahlen.

    VB.NET-Quellcode

    1. Imports System.Console
    2. Module Module1
    3. Dim Zufallszahl As Integer
    4. Dim MyArray() As Integer = {1, 2, 3, 4}
    5. 'Dim count As Int32 = 0
    6. Dim Zahl As Integer
    7. Dim Antwort As String
    8. Dim Versuche As Integer
    9. Sub Main()
    10. Randomize(Timer)
    11. Zufallszahl = 1 + Int(Rnd(1) * 20)
    12. Versuche = 0
    13. Do
    14. WriteLine()
    15. Write("Bitte geben Sie die gesuchte Zahl ein: ")
    16. Zahl = ReadLine()
    17. Versuche += 1
    18. Select Case Zahl
    19. Case Is < Zufallszahl
    20. WriteLine("Gesuchté Zahl ist größer")
    21. Case Is > Zufallszahl
    22. WriteLine("Gesuchte Zahl ist kleiner")
    23. Case Else
    24. WriteLine("Richtig geraten")
    25. ReadLine()
    26. WriteLine()
    27. End Select
    28. Loop Until Zahl = Zufallszahl Or Versuche = 5
    29. If Versuche = 5 Then WriteLine("Leider wurde die Zahl nicht erraten")
    30. Ende()
    31. End Sub
    32. Sub Ende()
    33. WriteLine("Neues Spiel? ...... ja oder nein?")
    34. Antwort = ReadLine()
    35. Select Case Antwort
    36. Case "ja"
    37. WriteLine()
    38. WriteLine()
    39. Main()
    40. Case "nein"
    41. Exit Sub
    42. Case Else
    43. WriteLine("Nur Eingabe ja und nein zulässig")
    44. End Select
    45. WriteLine()
    46. End Sub
    47. End Module
    Wenn der User eine Eingabe macht, musst du die Eingabe in eine Liste (Of Integer) oder (Of String) hinzufügen.

    Danach gehst du mit einer For Each- oder For-Schleife jeden Eintrag durch und fügst den entsprechenden Wert einem String zu (DeinString &= WERT).

    Das kannst du schöner gestalten, z.B. mit Kommatar.

    Schau dir dazu auch meine Funktion EingegebeneZahlen() an.

    VB.NET-Quellcode

    1. Private Function EingegebeneZahlen() As String
    2. Dim _zahlen As String = String.Empty
    3. For i As Integer = 0 To bisher.Count - 1
    4. _zahlen &= bisher(i).ToString() + ", "
    5. Next
    6. Return _zahlen.Remove(_zahlen.Length - 2, 2)
    7. End Function


    MfG
    hallo lapi :) danke für den code das ist genau das was ich haben wollte. allerdings will ich deinen code nicht komplett kopieren sondern versuchen in mein gerüst einzubauen. könnte also sein das ich noch die ein oder andere frage zu deiner funktion. bzw. ausgabe form habe.

    gruß tobias.

    VB.NET-Quellcode

    1. Imports System.Console
    2. Module Module1
    3. Dim Zufallszahl As Integer
    4. 'Dim zahlen As New ArrayList
    5. Public bisher As New List(Of Integer)
    6. Dim Eingabe As Integer
    7. 'Dim count As Int32 = 0
    8. Dim Zahl As Integer
    9. Dim Antwort As String
    10. Dim Versuche As Integer
    11. Sub Main()
    12. bisher.Clear()
    13. Dim eingegeben As String = String.Empty
    14. eingegeben = EingegebeneZahlen()
    15. Dim counter As Integer = 1
    16. Randomize(Timer)
    17. Zufallszahl = 1 + Int(Rnd(1) * 20)
    18. Versuche = 0
    19. Do
    20. bisher.Add(Integer.Parse(Zahl))
    21. WriteLine()
    22. Write("Bitte geben Sie die gesuchte Zahl ein: ")
    23. Zahl = ReadLine()
    24. Versuche += 1
    25. Select Case Zahl
    26. Case Is < Zufallszahl
    27. WriteLine("Gesuchté Zahl ist größer - " & Versuche & ". Versuch")
    28. Console.WriteLine("Bisher folgende Zahlen benutzt: {0} - {1}. Versuch", eingegeben, counter)
    29. Case Is > Zufallszahl
    30. WriteLine("Gesuchte Zahl ist kleiner" & Versuche)
    31. Case Else
    32. WriteLine("Richtig geraten" & Versuche)
    33. ReadLine()
    34. WriteLine()
    35. End Select
    36. counter += 1
    37. Loop Until counter = 5
    38. 'Loop Until Zahl = Zufallszahl Or Versuche = 5
    39. 'If Versuche = 5 Then WriteLine("Leider wurde die Zahl nicht erraten")
    40. Console.WriteLine("Sie haben leider all ihre Versuche verbraucht! Die Zahl lautete {0}.", Zufallszahl)
    41. Ende()
    42. End Sub
    43. Sub Ende()
    44. WriteLine("Neues Spiel? ...... ja oder nein?")
    45. Antwort = ReadLine()
    46. Select Case Antwort
    47. Case "ja"
    48. WriteLine()
    49. WriteLine()
    50. Main()
    51. Case "nein"
    52. Exit Sub
    53. Case Else
    54. WriteLine("Nur Eingabe ja und nein zulässig")
    55. End Select
    56. WriteLine()
    57. End Sub
    58. Private Function EingegebeneZahlen() As String
    59. Dim _zahlen As String = String.Empty
    60. For i As Integer = 0 To bisher.Count - 1
    61. _zahlen &= bisher(i).ToString() + ", "
    62. Next
    63. Return _zahlen.Remove(_zahlen.Length - 2, 2)
    64. Fehlermeldung:
    65. End Function
    66. End Module


    ich habe in der Do loop until schleife siehe meinen code oben die Überprüfungen und so weiter drin...

    wenn jetzt 5 Versuche vorbei sind. dann schreibt er mir
    die Zahl ist größer oder kleiner. Leider wurde die gewünschte Zahl nicht erraten.

    ich hätte aber gerne das er beim 5ten Fehlversuch die Auswertung Zahl größer oder kleiner überspringt und gleich Zahl wurde nicht erraten schreibt.

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