Как l oop вернуться от "z" к "a" в алфавите в Java? - PullRequest
0 голосов
/ 23 января 2020

Позвольте мне начать с того, что я только учусь Java. У меня возникла проблема, возвращающаяся с буквы «z» на «a».

System.out.println("You chose Decryption!");
br.nextLine();

System.out.println("Type a message:");
String msg = br.nextLine();

String decryptedMessage = "";

for (int i = 0; i < msg.length(); i++){
    int decryption = msg.charAt(i);

    //Trying to loop back from "a" to "z"
    decryption = ((char)decryption % 26);
    decryptedMessage = decryptedMessage + ((char) (decryption - 1));

}

System.out.println(decryptedMessage);

Я использовал операцию по модулю decryption = ((char)decryption % 26);, но вместо буквы «а» код дает мне скобку ([). Почему это не работает?

Ответы [ 2 ]

3 голосов
/ 23 января 2020

По ASCII таблица символ 'a' равен 97 (DE C), как указано выше. Я настоятельно рекомендую вам просмотреть эту таблицу. Это поможет вам понять, что происходит под капотом. Итак, ваша запись 'a'+1 на самом деле она конвертируется в 97 + 1.

3 голосов
/ 23 января 2020

Не ясно, в чем реальная проблема. Код выглядит как проблема шифра Цезаря, но вы просите вернуться к форме от z до a. если вы удалите строку

decryption = ((char)decryption % 26); 

, вы приблизитесь к расшифровке сообщения, потому что я думаю, что вы выбираете shift = 1 для шифрования своих сообщений. Я предполагаю, что вы запрашиваете зацикливание формы z на a из-за определения cesar cipher в википедии

Если мое предположение верно, проблема в том, что числовое представление char не ' a '= 0,' b '= 1 и т. д., но' A 'имеет числовое представление c, равное 65, и' a ', равное 97. Вы сдвигаете неправильное число.

...