Guten Abend,
ich hatte die Hausaufgabe, die Cäsar-Verschlüsselung in Java zu implementieren.
Dies habe ich auch (hoffentlich) geschafft. Also ich habe ein paar Teststrings ver- und entschlüsselt und verglichen.
Hier ist mal der Quellcode:
Ich finde irgendwie, dass ich das unsauber gelöst habe. Vorallem die for-Schleifen-Verschachtelung finde ich sehr unübersichtlich.
Nun zu meiner Frage:
Kann man es übersichtlicher, "sauberer" lösen?
Und zweitrangig: Ist mein Programmierstil so in Ordnung?
Ich bin für jede Antwort sehr dankbar.
ich hatte die Hausaufgabe, die Cäsar-Verschlüsselung in Java zu implementieren.
Dies habe ich auch (hoffentlich) geschafft. Also ich habe ein paar Teststrings ver- und entschlüsselt und verglichen.
Hier ist mal der Quellcode:
Java:
import java.util.Scanner;
public class CaesarCrypt {
private char alphabet[];
public CaesarCrypt() {
initAlphabet();
}
public String encode(String text) {
StringBuilder sb = new StringBuilder();
String newText = text.trim();
char letter[] = newText.toLowerCase().toCharArray();
int current = 0;
for(int k = 0; k < letter.length; k++) {
for(int i = 0; i < alphabet.length; i++) {
if(letter[current] == alphabet[i]) {
if((i + 3) >= alphabet.length)
sb.append(alphabet[(int) Math.abs((alphabet.length - i)-3)]);
else
sb.append(alphabet[i+3]);
}
if(i == alphabet.length - 1)
current++;
}
}
return sb.toString();
}
public String decode(String text) {
StringBuilder sb = new StringBuilder();
String newText = text.trim();
char letter[] = newText.toLowerCase().toCharArray();
int current = 0;
for(int k = 0; k < letter.length; k++) {
for(int i = 0; i < alphabet.length; i++) {
if(letter[current] == alphabet[i]) {
if((i - 3) < 0)
sb.append(alphabet[(alphabet.length + i) - 3]);
else
sb.append(alphabet[i-3]);
}
if(i == alphabet.length - 1)
current++;
}
}
return sb.toString();
}
public void initAlphabet() {
alphabet = new char[26];
char c = 'a';
for(int i = 0; i < alphabet.length; i++) {
alphabet[i] = c;
c++;
}
}
public static void main(String[] args) {
int in;
Scanner s = new Scanner(System.in);
CaesarCrypt cc = new CaesarCrypt();
System.out.println("###########################");
System.out.println("# #");
System.out.println("# Caesar-Verschluesselung #");
System.out.println("# #");
System.out.println("###########################");
System.out.println("# #");
System.out.println("# #");
System.out.println("# 1 - Verschluesseln #");
System.out.println("# 2 - Entschluesseln #");
System.out.println("# #");
System.out.println("# #");
System.out.println("###########################");
in = s.nextInt();
if(in == 1) {
System.out.println();
System.out.print("Text: ");
System.out.println("Verschluesselt: " + cc.encode(s.next()));
} else if(in == 2) {
System.out.println();
System.out.print("Text: ");
System.out.println("Entschluesselt: " + cc.decode(s.next()));
}
}
}
Ich finde irgendwie, dass ich das unsauber gelöst habe. Vorallem die for-Schleifen-Verschachtelung finde ich sehr unübersichtlich.
Nun zu meiner Frage:
Kann man es übersichtlicher, "sauberer" lösen?
Und zweitrangig: Ist mein Programmierstil so in Ordnung?
Ich bin für jede Antwort sehr dankbar.