Textentschlüsselung nach Caesar

BeatBastic

Neues Mitglied
Hey,

wer hätte es gedacht: Ich habe einen Fehler, den ich nicht finde.
Es geht um die Entschlüsselung von Text nach dem Prinzip von Caesar. Die Verschlüsselung klappt, die Entschlüsselung nicht ganz:

Java:
class CaesarEntschluesselung{

   private static String[] Alphabet = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };

   public static void main (String[] args) {
                String input;
                String eingabe;
                int eingabe2;
                String ausgabe="";
                int a;
                System.out.println("Welcher Text soll entschlüsselt werden?");
                eingabe = StdIn.readln();
                System.out.println("");
                System.out.println("Welche Entschlüsselungszahl soll verwendet werden?");
                System.out.print("- ");
                input = StdIn.readln();
                System.out.println("");
                eingabe2 = Integer.valueOf(input).intValue();
                eingabe2 = eingabe2 % 26;
                for(int i = 0; i < eingabe.length(); i++){
                  a = eingabe.charAt(i);
                  if (a > 64 & a < 91) {
                   a = a + 32;
                  }
                  if (a < 96 || a > 123) {
                   ausgabe = ausgabe + (char) a;
                  }
                  else {
                   ausgabe = ausgabe + (char) ((a-eingabe2-97)%26+65);
                  }
                }
                System.out.println("Der entschlüsselte Text lautet:");
                System.out.println(ausgabe);
               }
  }

Es klappt zum Teil, nur nicht in solchen Fällen:
Wenn "A" der verschlüsselte Buchstabe ist, die Verschlüsselungszahl 3 ist, müsste das entschlüsselte Zeichen ja "X" sein. Aber das funktioniert nicht. Wahrscheinlich nur ein kleiner Fehler, aber ich finde ihn nicht.


Ich hoffe, ihr könnt helfen,
Danke!
 
Der Fehler liegt in deinem Else zweig
Java:
else {
                   ausgabe = ausgabe + (char) ((a-eingabe2-97)%26+65);
                  }

wenn du das mal nachrechest und eben den Buchstaben 'a' einsetzt wirst du merken, dass hier ein negativer wert herauskommt, der kleiner als 'a' ist und daher wird auch ein anderes zeichen angezeigt.

du musst hier dir etwas einfallen lassen, dass wenn der Wert der variable a kleiner als 'A' ist dann musst du noch 26 dazu addieren.


Weiters finde ich es absolut unschön , dass du überall die Zahlenwerte der Buchstaben verwendest.
das sollte man anders machen.

z.B.

Code:
if (a < 96 || a > 123) {
                   ausgabe = ausgabe + (char) a;
                  }

sollte eher so aussehen

Java:
if (a < 'a' || a > 'z') {
     ausgabe = ausgabe + (char) a;
}

dann in einer if bedingung sollte man statt & ein && verwenden

Lg

um die Zeichen alle in Klein beziehungsweise gros Buchstabe zu verwandeln kann man die Methoden von String toUpperCase() oder toLowerCase() verwenden, dann ersparst du dir eine if bedingung.
 
Hey, danke für die schnelle Antwort.
Habe auch nochmal einige Zeit rumgebastelt, aber das +26 hab ich nirgendwo sinnvoll einbauen können bzw, ich bekomme das Programm nicht zum Laufen.
Aber durch eine andere Variante klappt es doch.

Danke 😉
 

Neue Themen


Zurück
Oben