Problem mit Arrays

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ThuCommix.

    Problem mit Arrays

    Hallo erstmal,

    bin neu hier im Forum und auch neu im Programmieren. Hab vor 2 Wochen mit dem online Visual Basic .Net Kurs von MSDN angefangen und mir das Buch C# 6 mit Visual Studio 2015 von Andreas Kühnel gekauft, da ich eigentlich C# lernen will.

    Da ich aber erst seit 2 Tagen mit C Sharp rumhantiere, und in VB doch schon mehr Erfahrung hab (wenn man bei 2 Wochen überhaupt schon von Erfahrung sprechen kann ;) ) hab ich jetzt ein Consolen Programm in VB geschrieben.

    Jetzt steh ich aber an.

    Zum Programm: Meine Tochter hat nächste Woche Sachkundetest in der 4. Klasse Volksschule und da hab ich dass gleich als Anlass genommen um ein Programm zu schreiben welches sie die Prüfungsfragen abfragt.

    Eine Frage davon heißt "Nenne alle 9 Bundesländer von Österreich" und soll so konzipiert sein dass sie ein Bundesland eingibt und mit Enter bestätigt. Ist die Antwort richtig (oder auch falsch) wird ihr dass angezeigt und sie wird aufgefordert das nächste einzugeben.

    Wenn ihr einen Blick auf den Code werft werdet ihr vermutlich gleich erkennen dass mir das Programm crasht.

    Meine eigentliche Frage lautet: Wie schaffe ich es dass die Variable A3 dessen Wert durch Console.Readline von ihr eingegeben wird, mit dem Inhalt des Arrays verglichen wird?

    Also wenn sie zb Wien eingibt so kommt das im Array ja vor und das soll das Programm dann als richtig erkennen.




    VB.NET-Quellcode

    1. Dim Bundeslander1() As String = {"Niederösterreich", "niederösterreich", "Wien", "wien", "Oberösterreich" _
    2. & "oberösterreich", "Burgenland", "burgenland", "Tirol", "tirol", "Vorarlberg", "vorarlberg" _
    3. & "Salzburg", "salzburg", "Kärnten", "kärnten", "Steiermark", "steiermark"}
    4. Console.WriteLine("Frage5:")
    5. Console.WriteLine("Kennst du alle Bundesländer von Österreich?")
    6. Console.WriteLine("Wie heißt das Erste?")
    7. Dim A3 As String = Console.ReadLine
    8. If A3 = Bundeslander1(18) Then
    9. meinSpiel.Richtig()
    10. Else
    11. meinSpiel.falsch()
    12. End If


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

    Ich würde es so machen: (Die Groß- und Kleinschreibung ist egal, deswegen habe ich die klein geschriebenen Wörter aus dem Array entfernt)

    VB.NET-Quellcode

    1. Module Main
    2. Dim Bundesleander() As String = {"Niederösterreich", "Wien", "Oberösterreich", "Burgenland", "Tirol", "Vorarlberg", "Salzburg", "Kärnten", "Steiermark"}
    3. Sub Main()
    4. Console.WriteLine("Frage 1:" & " " & """Kennst Du alle Bundesländer von Österreich?""")
    5. Console.WriteLine("")
    6. Console.WriteLine("Kennst Du das Erste?")
    7. 'Das erste Bundesland im Array
    8. If Console.ReadLine.ToLower = Bundesleander(0).ToLower = True Then
    9. Console.WriteLine("")
    10. Console.ForegroundColor = ConsoleColor.Green
    11. Console.WriteLine("Du hast die Frage richtig beantwortet.")
    12. Console.ForegroundColor = ConsoleColor.Gray
    13. Else
    14. Console.WriteLine("")
    15. Console.ForegroundColor = ConsoleColor.Red
    16. Console.WriteLine("Du hast die Frage leider nicht richtig beantwortet.")
    17. Console.ForegroundColor = ConsoleColor.Gray
    18. End If
    19. 'Bundesland im Array
    20. Dim Gefunden As Boolean
    21. Dim Antwort As String = Console.ReadLine
    22. For Each Bundesland In Bundesleander
    23. If Gefunden = True = False Then
    24. If Antwort.ToLower = Bundesland.ToLower = True Then
    25. Gefunden = True
    26. Exit For
    27. End If
    28. End If
    29. Next
    30. If Gefunden = True Then
    31. Console.WriteLine("")
    32. Console.ForegroundColor = ConsoleColor.Green
    33. Console.WriteLine("Du hast die Frage richtig beantwortet.")
    34. Console.ForegroundColor = ConsoleColor.Gray
    35. ElseIf Gefunden = False Then
    36. Console.WriteLine("")
    37. Console.ForegroundColor = ConsoleColor.Red
    38. Console.WriteLine("Du hast die Frage leider nicht richtig beantwortet.")
    39. Console.ForegroundColor = ConsoleColor.Gray
    40. End If
    41. Console.ReadKey()
    42. End Sub
    43. End Module
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Vultrax“ ()

    Ich würde von Consolen- auf Formsanwendung umsteigen und die Bundesländer in eine List (Of String) packen und dort die Vorzüge der List nutzen (z.B. .Contains)
    Siehe Verlinkungen dazu in MIt For each-Schleife nur die ungeraden Zeilen einer List of String lesen

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

    Vultrax schrieb:


    VB.NET-Quellcode

    1. If Gefunden = True = False Then


    Gefunden = True ist unnötig, da Gefunden schon den Wert True/False annimmt.

    Ich würde ja eher hierzu tendieren:

    VB.NET-Quellcode

    1. If Not Gefunden Then


    Ist knackiger, kürzer und einfacher zu lesen ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ja, ich weiß, mache es manchmal halt gerne so, weil ich es schöner zu lesen finde. :)

    mrMo schrieb:

    Ich würde ja eher hierzu tendieren:

    VB.NET-Quellcode

    1. If Not Gefunden Then


    Ist knackiger, kürzer und einfacher zu lesen ;)

    So habe ich das bislang noch nicht gemacht, ich werde es mal ausprobieren!
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Vultrax schrieb:


    So habe ich das bislang noch nicht gemacht, ich werde es mal ausprobieren!


    Schau mal hier rein, da gibt's noch weitere Tipps solcher Art:
    Beispiele für guten und schlechten Code (Stil)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Schau dir mal Array.IndexOf an, wenn die Funktion -1 zurückgibt hat sie nix gefunden, bei Listen gibt es außerdem noch contains und bei Arrays Exists(hab damit aber noch nie gearbeitet...). Und ich würde davor noch die Eingabe mit String.ToLower() in Kleinbuchstaben umwandeln, damit niederösterreich und Niederösterreich erkannt werden. (dann muss im Array aber auch alles klein geschrieben sein!!! (Also anstatt Niederösterreich im Array niederösterreich)

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Ich halte string.Compare für sinnvoller:
    msdn.microsoft.com/en-us/libra…cs-lang=vb#code-snippet-1
    msdn.microsoft.com/en-us/libra…comparison(v=vs.110).aspx
    Da gibt es dann die Möglichkeit case insensitiv zu vergleichen.
    Außerdem ist(wie ich gehört hab) das vergleichen von UpperCase auf WIndows optimiert(also nicht lowercase)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    nur blöd, dass die Loop von Array.IndexOf in .Net geschrieben ist und nicht auf eine native Funktion mappt. außerdem kann das Mapping auf native Funktionen in manchen Fällen mehr Zeit kosten als das ausführen in .Net bei solch einer kurzen Schleife wäre dies wohl sogar der Fall.
    Und wenn du guckst was für Dinge von Array.indexOf noch alles überprüft wird, bist du mit einer eigenen Schleife definitiv besser bedient.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---