Я создаю программу для создания кода Caesar Cipher, который меняет буквы одним словом, когда я нажимаю Enter, и предлагает пользователю снова переключиться или уволиться.Программа Caesar Cipher Java не может сдвинуться более чем на 23
Он работает до тех пор, пока я не доберусь до 23 смены, после чего он начинает использовать символы, отличные от буквы, по какой-то причине, и я не уверен, почему это происходит.
Любые предложения? Вот код:
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");
}
}
Вы отлаживали свой код? –
'... plaintext + = shift; } else {plaintext + = shift; } '- Это не имеет смысла. Вы можете поместить выражение 'plaintext + = shift' за пределы' else'. –
Просто чтобы вы знали - прошлое '' Z'' и '' z'' - это несколько символов, которые не имеют никакого отношения к буквам. Вы захотите пропустить их. – Makoto