Hey, habe ein problem, unzwar soll ich nächste woche in informatik eine Caesar verschlüsselung programmieren, aber es funktioniert aus irgendeinen grund nicht?

5 Antworten

ich würds ja so machen

import java.util.Scanner;


public class Caesar_2 {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Zu verschlüsselnden Text eingeben:");
String text = scanner.nextLine(); // Text eingeben

int offset = 20;

System.out.println(encode(text, offset));

}

public static String encode(String text, int offset) {
String encoded = "";
int ascii;
for (int i = 0; i < text.length(); i++) {
char letter = text.charAt(i);

if(Character.isDigit(letter)){ // skip the letter if it's a digit
encoded+=letter;
continue;
}

ascii = (int) (letter); // get corresponding ascii value for the letter

// if it's an uppercase, the ascii starts at 65, otherwise 97
int asciibegin;
if(Character.isUpperCase(letter)){
asciibegin=65;
}else{
asciibegin=97;
}

// calculate the encoded value >>(ascii-ascibegin) = 1 for a; 2 for b;...<<
ascii = ((ascii-asciibegin+offset) % 26)+asciibegin;
encoded += (char) (ascii);
}

return encoded;
}

}

hab es nochmal ein wenig bearbeitet, problem bleibt das selbe

import java.util.Scanner;

public class Caesar {

public static void main (String[] args) {

Scanner scanner = new Scanner (System.in);

System.out.println("Zu verschlüsselnden Text eingeben:");

String text = scanner.nextLine(); // Text eingeben

int offset = 3;
// Offset (Verschiebung) wählen

char [] meinArray = text.toCharArray();
// den Text in ein Char Array laden

char [] meinNeuesArray = verschluesseln(offset, meinArray);
// mit der Methode (siehe unten) "verschluesseln" ein neues
// Char Array mit dem verschlüsselten Text erstellen

// verschlüsselten Text wieder ausgeben:

System.out.println("\nSo sieht der Text verschlüsselt aus:");

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

System.out.print(meinNeuesArray[i]);
}
System.out.println("\n");

scanner.close();
}

// hier die Methode zum verschlüsseln

public static char[] verschluesseln(int offset, char[] charArray) {

char[] cryptArray = new char[charArray.length];
// erstmal ein leeres Char Array erstellen

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

int verschiebung = (charArray[i] + offset)%25;
// ursprüngliches Zeichen plus Offset modulo 26

cryptArray[i] = (char) (verschiebung);

}
return cryptArray;

}

}


int verschiebung = (charArray[i] + offset)%26;


Damit verschiebst du alle chars auf 0 bis 25. Du musst den den offset von A auf das Ergebnis des modulo addieren.
Ausserdem gehst du von 26 Buchstaben aus, garantierst aber nirgends Gross -oder Kleinschreibung. Nimm besser ein Konstantenarray für dein zu verschlüsselnden Zeichenvorrat.

...und noch nen Tip: man erkennt eindeutig, dass du den code kopiert und abgeändert hast. gib den besser nicht so ab.

gruss, dj

wo genau liegt das Problem, also was funktioniert nicht?