JAVA- Code Schritt für Schritt erläutern bitte? :(

Erste Frage Aufrufe: 1301     Aktiv: 30.01.2020 um 11:55

0

import java.util.Scanner;

>           public class CäsarSchiffre {

>               public static void main(String[] args) {

>                   Scanner scanner = new Scanner(System.in);

>                   System.out.println(" Text eingeben ");

>                   String Text = scanner.nextLine();

>                   System.out.println(" Um wie viele Stellen soll verschoben werden? (1-127)");

>                   int verschieben = scanner.nextInt();

>                   if (verschieben >= 1 && verschieben <= 127) {

>                       char[] Feld = Text.toCharArray();

>                       char[] Feld1 = verschluesseln(verschieben, Feld);

>                       System.out.println("So sieht der Text verschüsselt aus");

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

>                           System.out.println(Feld1[i]);
>                       }
>                       Feld1 = entschluesseln(verschieben, Feld1);

>                       System.out.println(" und so wieder zurück eintschlüsselt");

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

>                           System.out.print(Feld1[i]);
>                       }
>                   } else
>                       System.out.println("Die Verschiebung muss zwischen 1 und 127 liegen!");

>               }
>               public static char[] entschluesseln(int verschieben, char[] feld2) {

>                   char[] leerArray = new char[feld2.length];

>                   int verschiebung1;
>                   for (int i = 0; i < feld2.length; i++) {

>                       if (feld2[i] - verschieben < 0)
>                           verschiebung1 = feld2[i] - verschieben + 128;
>                       else

>                           verschiebung1 = (feld2[i] - verschieben) % 128;
>                       leerArray[i] = (char) (verschiebung1);
>                   }
>                   return leerArray;
>               }
>               public static char[] verschluesseln(int verschieben, char[] feld) {

>                   char[] leerArray = new char[feld.length];
>                   for (int i = 0; i < feld.length; i++) {
>                       leerArray[i] = (char)((feld[i] + verschieben) % 128);
>                   }
>                   return leerArray;
>               }
>           }
Diese Frage melden
gefragt

Student, Punkte: 10

 

Du kannst das auch als Code formatieren hier. Dann könnte man dir sicher helfen

  ─   uninstall 28.01.2020 um 17:44

okay hab :)

  ─   mathelol 28.01.2020 um 17:54
Kommentar schreiben
1 Antwort
2

So, damit sollte alles klar sein. Die Erklärung habe ich als Kommentar in die jeweilige Code-Zeile gepackt. Eine ASCII Tabelle findest du hier. Das Ganze baut auf wichtigem fundamentalen Verständnis der Programmierung auf. Ich empfehle dir hier nochmal nachzulernen, sonst wirst du in Zukunft noch mehr solche Probleme haben. Immer dran bleiben und nicht entmutigen lassen. Aller Anfang ist schwer.

"Main" Methode

public class CäsarSchiffre { public static void main(String[] args) {

Scanner scanner = new Scanner(System.in); 
System.out.println(" Text eingeben ");

String Text = scanner.nextLine();           //Text wird eingelesen
System.out.println(" Um wie viele Stellen soll verschoben werden? (1-127)"); //127 zur Auswahl basierend auf ASCII. Bei 128 findet
                                                                             // keine Verschiebung mehr statt

int verschieben = scanner.nextInt();    //Zahl einlesen

if (verschieben >= 1 && verschieben <= 127) { //Kontrolle ob eingegebene Zahl zwischen 1 und 127 liegt
    char[] Feld = Text.toCharArray();     // String Eingabe wird zu Array konvertiert
    char[] Feld1 = verschluesseln(verschieben, Feld); // Funktion "verschlüsseln wird aufgerufen" mit Übergabe der Variablen "verschieben" und "Feld"
    System.out.println("So sieht der Text verschüsselt aus"); 
    for (int i = 0; i < Feld1.length; i++) { 
            System.out.println(Feld1[i]);       //Char-weise Ausgabe des verschlüsselten Text
        }

        Feld1 = entschluesseln(verschieben, Feld1);  //Funktion "entschlüsseln" wird ausgegeben mit Übergabe der Variablen "verschieben" und "Feld"
        System.out.println(" und so wieder zurück eintschlüsselt");

        for (int i = 0; i < Feld1.length; i++) { 
            System.out.print(Feld1[i]);     ////Char-weise Ausgabe des entschlüsselten Text
        }

        } else  //Eingegebene Zahl liegt nicht zwischen 1 und 127
        System.out.println("Die Verschiebung muss zwischen 1 und 127 liegen!"); }

Methode "entschlüsseln":

    public static char[] entschluesseln(int verschieben, char[] feld2) { 
        char[] leerArray = new char[feld2.length]; 
        int verschiebung1;

        for (int i = 0; i < feld2.length; i++) { 
            if (feld2[i] - verschieben < 0)                 //Kontrolle ob Dezimalwert des Chars abzüglich von "verschieben" negativ ist
             verschiebung1 = feld2[i] - verschieben + 128;  //Falls ja, dann 128 hinzu addieren (wieder basierend auf der ASCII Tabelle),
                                                            //da diese 128 Zeichen hat. 
                                                            //Beispiel: Es wurde 'a' eingegeben. Das entspricht dem Dezimalwert von 97
                                                            //Beim verschlüsseln wurde der Dezimalwert von 'a' um 64 erhöht. Dadurch ergibt
                                                            //das laut ASCII den chart wert von '!' und den Dezimalwert von 33. 
                                                            //Jetzt wollen wir das Ganze wieder zurück setzen. 33 minus 64 ergibt aber einen
                                                            //negativen wert. Dafür ist in der ASCII Tabelle aber kein Wert zugewiesen für ein Char.
                                                            //Um jetzt wieder auf den entsprechenden Ausgangswert von 64 zu kommen, addieren wir
                                                            //also 128 dazu. Rechnung: 33 - 64 + 128 = 97
                                                            //Und 97 untspricht wieder unerem Ausgangswert von 'a'

            else 
                verschiebung1 = (feld2[i] - verschieben) % 128; //Falls der Wert nicht negativ ist, dann gleiche Operation wie in der 
                                                                //Methode "verschlüsseln" (Erklärung siehe unten)

            leerArray[i] = (char) (verschiebung1);              //siehe unten
        } 
        return leerArray;                                       //siehe unten
    }

Methode "verschlüsseln":

        public static char[] verschluesseln(int verschieben, char[] feld) { 
        char[] leerArray = new char[feld.length]; //Es wird eine neues char Array erzeugt mit der Länge des übergebenen Strings
                                                  //mit Hilfe der Funktion feld.length von Java wird die benötigte Länger ermittelt
        for (int i = 0; i < feld.length; i++) {     //Iteration über jeden Index des neuen Char Arrays

            leerArray[i] = (char)((feld[i] + verschieben) % 128); //zum ASCII Dezimalwert eines jeden Chars, wird der Wert "verschieben"
        }                                                         // hinzuaddiert. Anschließend wird mit "%128" geschaut ob der Wert ohne Rest
                                                                  //durch 128 teilbar ist. Zuletzt wird das ganze wieder als Char gecastet
                                                                  //und auf den entsprechenden Index von leerArray zugewiesen
        return leerArray;   //Rückgabe des gesamten Array an die Funktion
    }
Diese Antwort melden
geantwortet

Punkte: 20

 

Okay Dankeschön :D

  ─   mathelol 30.01.2020 um 11:55

Kommentar schreiben