Laufzeitfehler "Der Index war außerhalb des Arraybereichs"

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Laufzeitfehler "Der Index war außerhalb des Arraybereichs"

    Hallo, liebe Mitmenschen,

    ich bin ein ziemlicher Neuling in Visual Basic. Momentan programmiere ich ein bisschen an einem Gehirnjogging-Programm für die Schule. Ich habe allerdings folgendes Problem: Sobald man auf den Start-Button klickt, kommt der Fehler "Der Index war außerhalb des Arraybereichs" mit Markierung in der Zeile

    btnAntwortA.Text = CStr(arr1(aa, frage))


    Wie gesagt, ich bin hier vollkommen neu und programmiere eigentlich auch nicht sicher mit Arrays. Ich hoffe, ihr helft mir trotzdem... :)

    VB.NET-Quellcode

    1. Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click btnStart.Visible = False lblBewertung.Visible = False lblFrage.Visible = True lblAnleitung.Visible = False lblAnleitung2.Visible = False lblAnleitung3.Visible = False btnAntwortA.Visible = True btnAntwortB.Visible = True btnAntwortC.Visible = True btnAntwortD.Visible = True
    2. tmrZeit.Start() prgZeit.Visible = True prgZeit.Value = 0 p = 0 pn1 = Randomnumber(1, 4) passt1 = Randomnumber(0, 11) passt2 = Randomnumber(0, 11) passt3 = Randomnumber(0, 11) passtnicht1 = Randomnumber(12, 23) frage = Randomnumber(0, 5) If pn1 = 1 Then p1 = 2 aa = passtnicht1 antA = False ab = passt1 antB = True Else : p1 = 1 aa = passt1 antA = True End If If pn1 = 2 Or p1 = 2 Then p2 = 3 ac = passt2 antC = True If pn1 = 2 Then ab = passtnicht1 antB = False End If Else : p2 = 2 ab = passt2 antB = True End If If pn1 = 3 Or p2 = 3 Then p3 = 4 ad = passt3 antD = True If pn1 = 3 Then ac = passtnicht1 antC = False End If Else : p3 = 3 ac = passt3 antC = True ad = passtnicht1 antD = False End If lblFrage.Text = "Finde die Antwort, die nicht zu den anderen passt."
    3. Dim arr1(25, 5) As String
    4. btnAntwortA.Text = CStr(arr1(aa, frage)) btnAntwortB.Text = CStr(arr1(ab, frage)) btnAntwortC.Text = CStr(arr1(ac, frage)) btnAntwortD.Text = CStr(arr1(ad, frage))
    5. p = p + arr1(24, frage)
    6. arr1(0, 0) = "Paris" arr1(1, 0) = "Warschau" arr1(2, 0) = "Kopenhagen" arr1(3, 0) = "Dakar" arr1(4, 0) = "Brasilia" arr1(5, 0) = "Nairobi" arr1(6, 0) = "Moskau" arr1(7, 0) = "Rom" arr1(8, 0) = "Canberra" arr1(9, 0) = "Wien" arr1(10, 0) = "Amsterdam" arr1(11, 0) = "Brüssel" arr1(12, 0) = "Nordrhein-Westfalen" arr1(13, 0) = "Niedersachsen" arr1(14, 0) = "Thüringen" arr1(15, 0) = "Hamburg" arr1(16, 0) = "Bremen" arr1(17, 0) = "Rheinland-Pfalz" arr1(18, 0) = "Hessen" arr1(19, 0) = "Harrisburg" arr1(20, 0) = "Austin" arr1(21, 0) = "Nashville" arr1(22, 0) = "Oklahoma City" arr1(23, 0) = "Indianapolis" arr1(24, 0) = 10 arr1(25, 0) = " ist keine Hauptstadt" arr1(0, 1) = "Juneau" arr1(1, 1) = "Phoenix" arr1(2, 1) = "Springfield" arr1(3, 1) = "Baton Rouge" arr1(4, 1) = "Frankfort" arr1(5, 1) = "Boston" arr1(6, 1) = "Santa Fé" arr1(7, 1) = "Austin" arr1(8, 1) = "Nashville" arr1(9, 1) = "Oklahoma City" arr1(10, 1) = "Indianapolis" arr1(11, 1) = "Harrisburg" arr1(12, 1) = "Paris" arr1(13, 1) = "Warschau" arr1(14, 1) = "Kopenhagen" arr1(15, 1) = "Dakar" arr1(16, 1) = "Brasilia" arr1(17, 1) = "Nairobi" arr1(18, 1) = "Moskau" arr1(19, 1) = "Rom" arr1(20, 1) = "Canberra" arr1(21, 1) = "Wien" arr1(22, 1) = "Amsterdam" arr1(23, 1) = "Brüssel" arr1(24, 1) = 20 arr1(25, 1) = " ist keine Hauptstadt eines US-amerikanischen Bundesstaats." arr1(0, 2) = "Bayern" arr1(1, 2) = "Baden-Württemberg" arr1(2, 2) = "Sachsen" arr1(3, 2) = "Sachsen-Anhalt" arr1(4, 2) = "Saarland" arr1(5, 2) = "Nordrhein-Westfalen" arr1(6, 2) = "Niedersachsen" arr1(7, 2) = "Thüringen" arr1(8, 2) = "Hamburg" arr1(9, 2) = "Bremen" arr1(10, 2) = "Rheinland-Pfalz" arr1(11, 2) = "Hessen" arr1(12, 2) = "Paris" arr1(13, 2) = "Warschau" arr1(14, 2) = "Kopenhagen" arr1(15, 2) = "Wien" arr1(16, 2) = "Amsterdam" arr1(17, 2) = "Brüssel" arr1(18, 2) = "Santa Fé" arr1(19, 2) = "Austin" arr1(20, 2) = "Nashville" arr1(21, 2) = "Oklahoma City" arr1(22, 2) = "Indianapolis" arr1(23, 2) = "Harrisburg" arr1(24, 2) = 10 arr1(25, 2) = " ist kein deutsches Bundesland." arr1(0, 3) = 5 arr1(1, 3) = 20 arr1(2, 3) = 25 arr1(3, 3) = 35 arr1(4, 3) = 10 arr1(5, 3) = 75 arr1(6, 3) = 45 arr1(7, 3) = 90 arr1(8, 3) = 95 arr1(9, 3) = 15 arr1(10, 3) = 0 arr1(11, 3) = 65 arr1(12, 3) = 7 arr1(13, 3) = 3 arr1(14, 3) = 17 arr1(15, 3) = 11 arr1(16, 3) = 79 arr1(17, 3) = 14 arr1(18, 3) = 16 arr1(19, 3) = 18 arr1(20, 3) = 20 arr1(21, 3) = 22 arr1(22, 3) = 24 arr1(23, 3) = 76 arr1(24, 3) = 10 arr1(25, 3) = " ist nicht restlos durch 5 teilbar." arr1(0, 4) = 12 arr1(1, 4) = 14 arr1(2, 4) = 16 arr1(3, 4) = 18 arr1(4, 4) = 20 arr1(5, 4) = 22 arr1(6, 4) = 24 arr1(7, 4) = 26 arr1(8, 4) = 28 arr1(9, 4) = 30 arr1(10, 4) = 32 arr1(11, 4) = 34 arr1(12, 4) = 45 arr1(13, 4) = 90 arr1(14, 4) = 95 arr1(15, 4) = 15 arr1(16, 4) = 0 arr1(17, 4) = 65 arr1(18, 4) = 37 arr1(19, 4) = 7 arr1(20, 4) = 3 arr1(21, 4) = 17 arr1(22, 4) = 11 arr1(23, 4) = 19 arr1(24, 4) = 15 arr1(25, 4) = " ist keine gerade Zahl." arr1(0, 5) = 7 arr1(1, 5) = 3 arr1(2, 5) = 17 arr1(3, 5) = 11 arr1(4, 5) = 79 arr1(5, 5) = 37 arr1(6, 5) = 23 arr1(7, 5) = 29 arr1(8, 5) = 89 arr1(9, 5) = 73 arr1(10, 5) = 47 arr1(11, 5) = 19 arr1(12, 5) = 45 arr1(13, 5) = 90 arr1(14, 5) = 95 arr1(15, 5) = 15 arr1(16, 5) = 0 arr1(17, 5) = 65 arr1(18, 5) = 20 arr1(19, 5) = 14 arr1(20, 5) = 16 arr1(21, 5) = 18 arr1(22, 5) = 22 arr1(23, 5) = 24 arr1(24, 5) = 20 arr1(25, 5) = " ist keine Primzahl."
    7. End Sub


    ich weiß, das Array hätte ich schöner hinschreiben können. Aber das sollte doch nicht das Problem sein?
    Vielen Dank für eure Hilfe!
    Du solltest dir zuerst ein gutes Konzept überlegen. (Das was du bisher hast ist keins ;) )
    Dazu würde ich mir zuerst das mal angucken.
    [VB.NET] Daten laden, speichern, verarbeiten - einfachste Variante
    Bei einem Quiz ist es so, dass du alle Fragen irgendwo stehen haben solltest. Dann liest du per Zufall eine aus, oder holst dir direkt alle und zeigst eine zufällige an.
    ErfinderDesRades hat im Tutorial bereich einige gute Sachen.
    Willkommen im Forum. :thumbup:

    EbolaBurger schrieb:

    Aber das sollte doch nicht das Problem sein?
    Wehret den Anfängen.
    Wenn jemand Dir helfen will, kopiert er sich Deinen Quelltext in ein Projekt und los.
    Wenn er jedoch diesen Quelltext 10 Minuten lang formatieren muss, konvergiert die Lust, Dir zu helfen, gegen Null.
    Also:
    1. Wenn Du willst, dass Dir geholfen wird, formatiere Deinen Code ordentlich.
    2. Arbeite mit Option Strict On. Trage das in den Projekteigenschaften ein (Projekt -> Eigenschaften -> Kompilieren), korrigiere die Fehler und dann geht es weiter.
    3. Wenn Du Arrays initial belegen willst, kannst Du das so tun:

    VB.NET-Quellcode

    1. Dim xx() As Integer = {1, 2, 3, 4, 5}
    2. Dim lines(,) As String = {{"aa", "bb"}, {"cc", "dd"}, {"ee", "ff"}}
    Grundprinzip, -problem bei VB.NET: Arrays sind Null-basiert, der 1. Index ist 0.
    Wenn Du mit Dim xx(5) As Double ein Array dimensionierst, ist seine Länge 6, die Indizes laufen von 0 bis 5 (das hat historische Gründe).
    Wenn Du mit Dim lines() = IO.File.ReadAllLines("c:\Temp\test.txt") zeilenweise einen Text einliest, laufen die Indizes von 0 bis lines.Length - 1.
    -------
    Übrigens sind Deine Arrays noch gar nicht belegt, wenn Du aus ihnen TextBoxen befüllst.
    frage = Randomnumber(0, 5) Was macht Deine Funktion Randomnumber? Ich denke mal, dass sie Werte außerhalb des möglichen Bereichs erzeugt.
    Und:
    arr1(4, 1) = "Frankfort": Meinst Du Frankfurt :D
    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!