[Problem] Der Index war außerhalb des Arraybereichs.

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Spck.

    [Problem] Der Index war außerhalb des Arraybereichs.

    Hi,

    ich habe ein Problem ich hatte mal vor ne verschlüsselung zu schreiben nur ein Prob.

    z.b. ein a wird zu 75 wenn ich es nun aber wieder zum a machen möchte muss ich ja nicht nur die 7 sondern auch die 5 einlesen.

    wenn ich das aber mit:

    VB.NET-Quellcode

    1. newtext = newtext & dekey(key.Chars(i) & text.Chars(i2) & text.Chars(Val(i2) + Val(1)))


    Erklärung falls ihr die braucht :
    Spoiler anzeigen
    Newtext der Text..
    Dekey die func um aus 75 z.b. A zu machen bsp:

    VB.NET-Quellcode

    1. Select Case Key.Chars(i)
    2. Case "75"
    3. newkey = newkey + "a"

    das key.Chars(i) brauche ich da vorher immer etwas aus dem schlüssel den ich zum verschlüsseln verwende rangehauen wird(ja so könnte man den schlüssel erfahren aber weiss ja niemand ;))
    Das text.chars(i2) währe jetzt die 7
    das texxt.chars(Val(i2) + Val(1)) wäre nun die 5



    mache kommt:

    Der Index war außerhalb des Arraybereichs.

    Ich weiss jetzt aber nicht warum der benannte Error kommt ;(
    Bitte helft mir.

    Lg

    Edit by hal2000:Die Farbe Rot ist der Moderation vorbehalten. Bitte zum Hervorheben eine andere Farbe verwenden.

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

    Hallo Spck,

    ohne deinen Code gesehen zu haben kann man zu diesem Fehler eine genaue Ursachenbeschreibung abgeben.

    Du hast versucht auf ein Element eines Array zuzugreifen welches es nicht gibt.

    Beispiel:
    Dein Array enthält 5 Einträge und du greifst auf den 7ten zu.

    VB.NET-Quellcode

    1. Dim a(4) As String
    2. Me.TextBox.Text = a(6)


    Gruss

    mikeb69
    Hmmm
    Das Array Text hat genau das als Wert:

    338233123315318231123115278227122715358235123515338233123315318231123115278227122715358235123515338233123315348234123415

    Dann kann ich dort doch text.Chars(7) auslesen?

    EDIT:

    hier der ganze code der function:

    VB.NET-Quellcode

    1. Private Function entschlüsseln(ByVal key As String, ByVal text As String)
    2. Dim newtext As String = ""
    3. For i = 0 To text.Length - 1
    4. For i2 = 0 To text.Length - 1
    5. newtext = newtext & dekey(key.Chars(i) & text.Chars(i2) & text.Chars(Val(i2) + Val(1)))
    6. Next
    7. Next
    8. entschlüsseln = newtext
    9. End Function


    Edit by hal2000: Fullquote(s) entfernt. Bitte in Zukunft vermeiden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hal2000“ () aus folgendem Grund: Code #added

    mikeb69 schrieb:

    Beispiel:
    Dein Array enthält 5 Einträge und du greifst auf den 7ten zu.

    VB.NET-Quellcode

    1. Dim a(4) As String
    2. Me.TextBox.Text = a(6)
    Dieses Beispiel generiert eben diesen Fehler.
    Sieh Dir im Debug bei Auftreten des Fehlers die Variablen und Indizes der betroffenen Zeile an.
    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!
    Na fein. Und wo liegt nun Dein Problem?
    Heute ist der 11.8.2011, es ist jetzt 15:41 Uhr.
    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!

    Spck schrieb:

    dabei das ich das problem nicht fixxen kann weil ich nicht weiss wie.

    Wenn der Fehler auftritt, hält der Debugger doch in der richtigen Zeile. Dann schaust du dir die Werte deiner Indizes an und weißt wo der Fehler steckt.


    Kleiner Tip von mir: Anhand von drei Zeilen Code kann ich dir sagen, dass die Bezeichnung Gurkencode eine Beleidigung für jede ehrbare Salatgurke wäre. Fang lieber noch mal von vorne an, aber RICHTIG. Denn du willst ja wohl keine Verschlüsselung selbst schreiben (das tun nur Idioten und/oder Kryptochef), sondern "lernen". Mit DEM Code lernste nix, weil du so ziemlich jeden Fehler machst, den man machen kann - jedenfalls lassen das deine Codezeilen, die wir sehen können, vermuten.
    Das ist mir schon klar.
    Du musst schon ein wenig kooperieren.
    Du hast eine Reihe von Hinweisen bekommen und sie ja/nein in Dein Programm eingearbeitet.
    Lass also die aktuellen Quellen sehen und sage, wo welches Problem auftritt.
    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!
    (Ich denke wohl immer was anderes als alle anderen, ha)

    Ich... wechsle zum Editor... ändere den Code mal auf Lesbar:

    VB.NET-Quellcode

    1. Dim entschluesseln_DieVariable As String = Nothing
    2. Private Sub entschluesseln_DieSub(ByVal key As String, ByVal text As String)
    3. Dim newtext As String = ""
    4. For i As Integer = 0 To text.Length - 1
    5. For j As Integer = 0 To text.Length - 1
    6. newtext = newtext & dekey(key.Chars(i) & text.Chars(j) & text.Chars(j + 1))
    7. Next
    8. Next
    9. entschluesseln_DieVariable = newtext
    10. End Sub
    11. Private Function dekey(ByVal Wut As String) As String
    12. 'Ich kenne diese Funktion nicht
    13. End Function


    Das ist immerhin lesbar. Entweder habe ich keine Ahnung warum da Schleifen drin sind oder ich habe keine Ahnung wofür key ist. Achso, Key ist der Schlüssel für die Verschlüsselung.
    Da fällt mir schon das erste auf: Ist der Schlüssel mindestens gleich lang wie der Text?

    Quellcode

    1. |0|1|2|3|4|5|6|
    2. |K|e|y| | | | |
    3. |C|r|y|p|t|i|c|

    Man sieht, dass der Schlüssel "Key" zu wenige Zeichen auffasst und bei Index 3 gibt's 'nen Crash.

    Nächstes: Warum zwei Schleifen? Das... arrr, das Geht nicht. Wenn Du alle Zeichen von text duchgehen willst solltest Du nur eine Schleife verwenden.
    Und spätestens da crasht es: For j As Integer = 0 To text.Lenght - 1. Das heißt der höchste vorkommende Index kann text.Lenght - 1 sein. Du addierst aber bei Zeile 7 (In meinem Code zumindest) zu j wieder 1 dazu, das heißt es wird versucht an der Position text.Lenght - 1 + 1 auszulesen, was 1 zu hoch ist.

    Aber das ist nicht alles: Ich verwende mal dieses Beispiel:

    Quellcode

    1. |0|1|2|3|4|5|6|
    2. |C|r|y|p|t|i|c|

    Das ist in der Variable text vorhanden (natürlich ohne die | Zeichen).
    Das heißt es wird so ausgelesen:

    Quellcode

    1. |0 |1 |2 |3 |4 |5 |6 |
    2. |Cr|ry|yp|pt|ti|ic|c?| und Crash!


    Du musst eine anständige Schleife verwenden:
    For i As Integer = 0 To text.Lenght - 1 Step 2 /Edit an dieser Stelle: Das muss text.Lenght - 2 heißen.
    '...
    Next
    Und Du musst überprüfen, ob der Text eine gerade Anzahl an Zeichen enthält. Dazu kenne ich jetzt kein Schnipsel.
    Was mich zu der nächsten Frage bringt: gibt Deine "Verschlüsselung" wirklich immer, egal bei welcher Eingabe einen zwei Zeichen langen String aus? Wenn nicht ist es sowiso unmöglich.
    Wie der Key zu verwenden ist ist dann noch mal eine andere Sache.


    Baue das mal in Deinen Code ein, dann reden wir weiter.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

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