Hallo liebe Community,
ich habe ein Problem, das ich nicht zum Lösen im Stande bin. Programmiert werden soll die Caesar-Verschiebung (ohne ASCII Tabelle). Leider bekomme ich bei der Eingabe einer Verschiebung um n Stellen (wobei gilt: n > Arraylänge) eine IndexOutOfBoundsException in der Encodingmethode.
Hier der entsprechende Code:
Beispiel:
beim Schlüssel n=35 gibt die Konsole folgendes aus
"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 32
at CaesarCrypt.encode(CaesarCrypt.java:44) <-//[entspricht Zeile 28 hier im Code]
at CaesarCrypt.main(CaesarCrypt.java:145)"
Über fachmännischen Rat wäre ich sehr dankbar!
MfG
ich habe ein Problem, das ich nicht zum Lösen im Stande bin. Programmiert werden soll die Caesar-Verschiebung (ohne ASCII Tabelle). Leider bekomme ich bei der Eingabe einer Verschiebung um n Stellen (wobei gilt: n > Arraylänge) eine IndexOutOfBoundsException in der Encodingmethode.
Hier der entsprechende Code:
Java:
//
// Encode Methode
//
public String encode(String text) {
StringBuilder sb = new StringBuilder(); // Für den Aufbau des codierten Strings
String newText = text.toString(); // Eliminiert Leerzeichen/nicht gesetzte Zeichen
char letter[] = newText.toLowerCase().toCharArray(); // Wandelt Eingabe in Kleinbuchstaben und legt neues Array fest
int current = 0; // Index aktueller Buchstabe
System.out.println();
System.out.println("Bitte Verschiebung um n Stellen angeben \n(nur positive Zahlen): ");
Scanner eingabe = new Scanner(System.in);
int n = eingabe.nextInt();
System.out.println();
System.out.println("Encoding läuft mit n = " + n + "...");
System.out.println();
eingabe.close();
// Füllt den StringBuilder mit den Zeichen aus der Eingabe
for (int k = 0; k < letter.length; k++) {
if (letter[current] == ' ') {
sb.append(' ');
}
for (int i = 0; i < alphabet.length; i++) { // Prüft das Alphabet
if (letter[current] == alphabet[i]) { // Prüft ob aktuelles Zeichen = Zeichen im Alphabet an Stelle i
if ((i + n) >= alphabet.length)
sb.append(alphabet[(int) Math.abs(((alphabet.length) - i)- n)]); // Verschiebung
else
sb.append(alphabet[i + n]); // Verschiebung
}
if (i == alphabet.length - 1) // beim letzten Buchstaben des Alphabets tue ...
current++; // Nächsten Buchstaben im String prüfen
}
}return sb.toString(); // gebildeten String ausgeben
}
Beispiel:
beim Schlüssel n=35 gibt die Konsole folgendes aus
"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 32
at CaesarCrypt.encode(CaesarCrypt.java:44) <-//[entspricht Zeile 28 hier im Code]
at CaesarCrypt.main(CaesarCrypt.java:145)"
Über fachmännischen Rat wäre ich sehr dankbar!
MfG
Zuletzt bearbeitet: