Мне дали задание для моего класса CompSci, в котором мы должны создать программу, которая использует Цезарь-Шифр для шифрования строки текста, однако я столкнулся с проблемой, когда мой код делает что-то смешное .
Я начал с создания массива строк, содержащих каждую букву алфавита. Затем я беру сообщение, введенное пользователем, делю его на слова, а затем на буквы. Каждая из этих букв затем помещается в массив с именем letters
. Как только у меня есть массив букв, я вызываю функцию 'getLetterIndex`.
В функции getLetterIndex
у меня есть внешний цикл for, считающий от i = 0
до i = 25
(25 - последний индекс в алфавитном массиве), и внутренний цикл for, повторяющийся по каждой букве в массиве. letters
. Если alphabet[i]
равно букве в массиве letters
, значение i
добавляется в массив с именем letterIndexes
. Таким образом, каждая буква преобразуется в числовое представление ее размещения в алфавите.
Мне удалось преобразовать каждую букву в значение индекса, но мой массив этих буквенных индексов каким-то образом сортируется от наименьшего к наибольшему.
static String[] alphabet = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
public static void tokenizeEnteredMessage(String message) {
String[] words = message.split(" ");
String[] letters = null;
for (String word : words) {
letters = word.toUpperCase().split("");
}
getLetterIndex(letters);
}
public static void getLetterIndex(String[] letters) {
int indexCount = 0;
int[] letterIndexes = new int[letters.length];
for (int i = 0; i < alphabet.length; i++) {
for (String letter : letters) {
if (alphabet[i].equals(letter)) {
letterIndexes[indexCount] = i;
indexCount++;
}
}
}
Вывод с сообщением «яблоко» и шифром со сдвигом 3:
Enter '0' to type a phrase or enter '1' to specify the path to a text document: 0
Enter message that you would like to have encrypted. Do not enter numerical values: apple
Enter the key you would like to use to encrypt (integer): 3
A P P L E
Original Position: 0 4 11 15 15
Position After Shift: 3 7 14 18 18
Encrypted Message:
D H O S S
Вы можете видеть выше, что каждая буква была правильно преобразована в свою позицию в алфавите, и смещение позиции было успешно завершено, но индексы по какой-то причине вышли из строя. «Исходное положение» должно быть: 0 15 15 11 4.
Как ни странно, он прекрасно работает, когда я ввожу алфавит в качестве шифруемого сообщения:
Enter '0' to type a phrase or enter '1' to specify the path to a text document: 0
Enter message that you would like to have encrypted. Do not enter numerical values: abcdefghijklmnopqrstuvwxyz
Enter the key you would like to use to encrypt (integer): 3
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Original Position: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Position After Shift: 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 0 1 2
Encrypted Message:
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
Я должен также упомянуть, что мой профессор просил нас не использовать какие-либо методы подстрок, а придерживаться только использования массивов как части требований задания.
Я уверен, что есть простая ошибка, которую я упустил из виду, но я не могу ее уловить. Я довольно новичок в Java и имею тенденцию слишком усложнять простые проблемы, поэтому любая помощь с этим очень ценится!