Странное преобразование Java между ASCII и INT - PullRequest
0 голосов
/ 17 декабря 2018

Я делаю некоторый кодекс для школы, упражнение: сделать шифр Цезаря.Код:

char temp = 'u';
int key = 14; 
int tempInt = ((int) temp) + key;
temp = (char) tempInt;

Температура должна быть 132 (ASCII), но Java дает мне «?».Как я могу решить эту проблему?Я думаю, что Java работает в Юникоде ... но я не знаю, как выполнить упражнение с добавлением значения ключа к тексту (шифр Цезаря).

1 Ответ

0 голосов
/ 17 декабря 2018

С вашим кодом temp является 131, который не является печатаемым символом. Чтобы сделать шифр Cesare, вам, вероятно, следует работать только с подходящими символами (в основном от 32 до 127. Поэтому вы должны использовать модуль по модулю, так что 127 + 1 даетyou 32

Вам необходимо определить диапазон обрабатываемого вами символа (может быть только от 'a' до 'z'), а затем определить размер этого диапазона.

Пример с 32и 127:

char temp = 'u';
int key = 14;
int tempInt = ((int) temp) + key;
tempInt -= 32;
tempInt %= (127 - 32);
tempInt += 32;
temp = (char) tempInt;
System.out.println(temp);
...