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
}
Punkte: 20
Du kannst das auch als Code formatieren hier. Dann könnte man dir sicher helfen
─ uninstall 28.01.2020 um 17:44