У меня возникла проблема с оберткой вокруг алфавита с помощью моей программы шифрования Цезаря.Caesar Cipher Верхняя и нижняя регистры Оберните вокруг
Программа отлично работает со всеми строчными буквами. Обтекает отлично и может применять положительные и отрицательные сдвиги. Когда я пытаюсь ввести заглавную букву, прописная буква не обертывается.
Вот мой код:
public static StringBuilder encode(String str, int numShift)
{
numShift = numShift % 26;
//assign each character of the string to a position in the character array
char[] strChars = str.toCharArray();
for (int i = 0; i < strChars.length; i++)
{
//ignore and continue if the character is not within the alphabet
if((strChars[i] < 'a' || strChars[i] > 'z') && (strChars[i]<'A' || strChars[i] > 'Z'))
continue;
//apply the shift to each character
strChars[i] += numShift;
//wrap around if the shift is beyond Z
**if(strChars[i] > 'z')
{
strChars[i] -= 'z';
strChars[i] += ('a' - 1);
}**
}
StringBuilder encodedStr = new StringBuilder();
encodedStr.append(strChars);
return encodedStr;
}
public static void init(){
Scanner scan = new Scanner(System.in);
System.out.println("Please enter the string that you would like to encode:");
String str = scan.nextLine();
System.out.println("Please enter the number of letters you would like to shift:");
int strShift = scan.nextInt();
scan.close();
StringBuilder result = encode(str, strShift);
System.out.println(result);
}
public static void main(String[] args)
{
init();
}
}
советы будут оценены! Конечно, я не прошу кого-либо сделать мою работу для меня, но какая-то помощь будет оценена! Спасибо! :)
Edit: вот если утверждение, что делает обертку вокруг только строчными буквами:
if(strChars[i] > 'z')
{
strChars[i] -= 'z';
strChars[i] += ('a' - 1);
}
Ваш подход не может работать, как он стоит, так как смещение +7 или более сместится некоторые прописные буквы в диапазон строчных букв. Я предлагаю проверить перед тем, как сдвинуть букву в верхнем регистре. Если это так, конвертируйте в нижний регистр, преобразуйте и преобразуйте результат назад. В противном случае просто конвертируйте, как вы уже делаете. –
Это имеет смысл, спасибо джон! –