Je crée un programme pour faire un César Cipher, qui décale les lettres dans un mot une fois lorsque j'appuie sur Entrée, et invite l'utilisateur à décaler à nouveau ou quitter.Caesar Cipher Java Program ne peut pas décaler plus de 23
Cela fonctionne jusqu'à ce que j'arrive à 23 décalages, puis il commence à utiliser des symboles non-lettre pour une raison quelconque, et je ne sais pas pourquoi cela se produit.
Des suggestions? Voici le code:
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class Cipher {
public static void main(String[] args) {
// encrypted text
String ciphertext;
// input from keyboard
Scanner keyboard = new Scanner(System.in);
if (args.length > 0) {
ciphertext = "";
try {
Scanner inputFile = new Scanner(new File(args[0]));
while (inputFile.hasNext())
ciphertext += inputFile.nextLine();
} catch (IOException ioe) {
System.out.println("File not found: " + args[0]);
System.exit(-1);
}
} else {
System.out.print("Please enter text--> ");
ciphertext = keyboard.nextLine();
}
// -----------------------------------------------------------------
int distance = 0; // how far the ciphertext should be shifted
String next = ""; // user input after viewing
while (!next.equals("quit")) {
String plaintext = "";
distance += 1;
for (int i = 0; i < ciphertext.length(); i++) {
char shift = ciphertext.charAt(i);
if (Character.isLetter(shift)) {
shift = (char) (ciphertext.charAt(i) - distance);
if (Character.isUpperCase(ciphertext.charAt(i))) {
if (shift > '0' && shift < 'A') {
shift = (char) (shift + 26);
plaintext += shift;
} else {
plaintext += shift;
}
}
if (Character.isLowerCase(ciphertext.charAt(i))) {
if (shift > '0' && shift < 'a' && ciphertext.charAt(i) < 't') {
shift = (char) (shift + 26);
plaintext += shift;
} else {
plaintext += shift;
}
}
} else {
plaintext += shift;
}
}
System.out.println(ciphertext);
// At this point, plaintext is the shifted ciphertext.
System.out.println("distance " + distance);
System.out.println(plaintext);
System.out.println("Press enter to see the next option,"
+ "type 'quit' to quit.");
next = keyboard.nextLine().trim();
}
System.out.println("Final shift distance was " + distance + " places");
}
}
Avez-vous débogué votre code? –
'... texte en clair + = décalage; } else {texte en clair + = shift; } '- Cela n'a pas de sens. Vous pouvez mettre l'instruction 'plaintext + = shift' en dehors de' else'. –
Juste pour que vous sachiez - passé «Z» et «z» sont une poignée de caractères qui n'ont rien à voir avec les lettres. Vous allez vouloir les ignorer. – Makoto