Я пытаюсь написать декодер шифра Цезаря на Java, но получаю неожиданный результат (см. пример ниже).
Метод BetterDecrypt() принимает строку cipherText для декодирования, а также целое числоshiftKey, которое представляет собой количество позиций вверх или вниз по алфавиту, на которые должен быть сдвинут каждый символ строки. Если символа нет в строке ALPHABET = "abcdefghijklmnopqrstuvwxyz", то я хочу сохранить символ как есть, например "ab4c" следует декодировать "bc4d".
import java.io.*;
import java.util.*;
public class SimpleDecoder {
public static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
public static String BetterDecrypt(String cipherText, int shiftKey) {
cipherText = cipherText.toLowerCase();
String message = "";
for (int ii = 0; ii < cipherText.length(); ii++) {
char character = cipherText.charAt(ii);
if (ALPHABET.contains(Character.toString(character))) {
int charPosition = ALPHABET.indexOf(cipherText.charAt(ii));
int keyVal = (charPosition - shiftKey) % 26;
if (keyVal < 0) {
keyVal = ALPHABET.length() + keyVal;
char replaceVal = ALPHABET.charAt(keyVal);
message += replaceVal;
}
} else {
message += character;
}
}
return message;
}
public static void main(String[] args) {
System.out.println(BetterDecrypt("ab4c", -1));
// OUTPUT: 4 EXPECTED OUTPUT: bc4d
System.out.println(BetterDecrypt("ab4c", 1));
// OUTPUT: z4 EXPECTED OUTPUT: za4b
}
}
Подробнее здесь: https://stackoverflow.com/questions/780 ... ted-output