Java-Programm funktionier unerklärlicherweise nicht?


07.04.2024, 20:44

Der Error lautet:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56

       at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)

       at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)

       at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)

       at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)

       at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)

       at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)

       at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)

       at java.base/java.lang.String.checkIndex(String.java:4881)

       at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:46)

       at java.base/java.lang.String.charAt(String.java:1582)

       at Main.main(Main.java:27)

smiregal8472  07.04.2024, 20:38

Was letzte Fehlermeldung?

SRWa0676 
Fragesteller
 07.04.2024, 20:43

Sie ist zu lang für eine Antwort ich bearbeite meine Frage so das sie die Fehlermeldung enthält

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Dacht ich mir schon, als ich den Code grob überflogen hab, aber mit der Fehlermeldung ist's bestätigt:

In der Zeile

spellzs += settings.charAt(counter1);

bzw. in deren Vorfeld überprüfst du nicht, ob counter1 evtl. über den letzten Index von settings hinausgeht.

Bedeutet, dass du versuchst auf ein Element hinter dem Ende des Strings zuzugreifen, was natürlich nicht funktioniert.

Ich glaube es liegt daran, dass du den Wert 56 ändern musst. (0 muss beachtet werden)

Pippin2323  07.04.2024, 20:49

Verbesserung:

import java.util.Scanner;

public class Main {

  public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);

    // Variablendeklaration

    int counter1 = 0;

    String input;

    String settings;

    String[] spelledInput = new String[input.length()];

    String[] spelledSettings = new String[19];

    String[] rotors = new String[3];

    int[] rotorPositions = new int[3];

    // Programm Beschreibung

    System.out.println("Dieses Programm chiffriert deinen Text mit der Enigma-M4-Verschlüsslung.");

    // Benutzereingabeaufforderung

    System.out.println("Gib deinen Text zum Verschlüsseln ein (ohne Leerzeichen):");

    input = scan.nextLine();

    System.out.println("Gib die Verschlüsselungseinstellungen an (z.B.: AZ-BY-CX-DW-EV-FU-GT-HS-IR-JQ-I-VI-VIII->1->13->26-A-M-Z):");

    settings = scan.nextLine();

    // Eingabeverarbeitung

    for (int i = 0; i < input.length(); i++) {

      spelledInput[i] = "";

      spelledInput[i] += input.charAt(i);

    }

    for (int i = 0; i < 19; i++) {

      spelledSettings[i] = "";

    }

    for (int i = 0; i < 19; i++) {

      String spellzs = "";

      spellzs += settings.charAt(counter1);

      if (!spellzs.equals("-")) {

        spelledSettings[i] += settings.charAt(counter1);

        counter1++;

        i--;

      } else {

        counter1++;

      }

    }

    // Einstellungen parsen

    parseSettings(settings, rotors, rotorPositions);

    // Verschlüsselung

    for (int i = 0; i < spelledInput.length; i++) {

      int currentRotor = 0;

      int currentRotorPosition = rotorPositions[currentRotor];

      char encryptedChar = spelledInput[i].charAt(0);

      while (currentRotor < 3) {

        encryptedChar = rotors[currentRotor].charAt((encryptedChar - 'A' + currentRotorPosition) % 26);

        currentRotorPosition = (currentRotorPosition + 1) % 26;

        currentRotor++;

      }

      spelledInput[i] = "" + encryptedChar;

    }

    // Ausgabe

    for (int i = 0; i < spelledInput.length; i++) {

      System.out.print(spelledInput[i]);

    }

    System.out.println();

  }

  private static void parseSettings(String settings, String[] rotors, int[] rotorPositions) {

    // Implementieren Sie die Logik zum Parsen der Einstellungen

    // ...

  }

}

0
SRWa0676 
Fragesteller
 07.04.2024, 20:52

Es gibt aber keinen Wert 56 von dem ich weiß.

0