Задача:
Зашифровать произвольный открытый текст над латинским алфавитом с помощью шифра однобуквенной замены
Код:
String str = "BE_HAPPY";
String[] bytes = new String[] { "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", " " };
int[] key = new int[] { 18, 22, 11, 7, 15, 19, 1, 23, 20, 26, 3, 14, 25, 4, 9, 5, 2, 24, 21, 6, 0, 8, 13, 12, 16, 10, 17 };
String a = "";
String m = "";
for (String ma : str.split("")) {
m = m + bytes[key[Arrays.asList(bytes).indexOf(ma)]];
}
System.out.print(m);
Ошибка:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 at L5.lab5.main(lab5.java:24)
Что делать?
в массиве bytes
нет символа подчеркивания, поэтому Arrays.asList(bytes).indexOf(ma)
возвращает -1. После попытки обратиться к -1 элементу массива key
выбрасывает java.lang.ArrayIndexOutOfBoundsException: -1
Как уже было сказано, проблема в символе _
, для которого нет соответствия в "таблице шифрования".
Позволю себе предположить, что символы, которых нет в "таблице шифрования", должны оставаться в первозданном виде. Тогда, с учетом небольшой оптимизации, код может выглядеть так:
String str = "BE_HAPPY";
Character[] chars = new Character[] { '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', ' ' };
List<Character> charsList = Arrays.asList(chars);
int[] key = new int[] { 18, 22, 11, 7, 15, 19, 1, 23, 20, 26, 3, 14, 25, 4, 9, 5, 2, 24, 21, 6, 0, 8, 13, 12, 16, 10, 17 };
StringBuilder sb = new StringBuilder(str.length());
for (char ch : str.toCharArray())
{
int charIndex = charsList.indexOf(ch);
char resultChar = charIndex >= 0 ? chars[key[charIndex]] : ch;
sb.append(resultChar);
}
System.out.println(sb.toString()); //WP_XSFFQ
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пишу приложение-криптер на java для школьного проекта(можно сказать еще новичок), хочу реализовать алгоритм RSA, чтобы можно было через него...
Привет всем, нужна помощь с захватом звука с аудио выхода (если это вообще возможно средствами Java) Данный код работает, но захватывает звук...
Я хочу активировать следующий и предыдущий элементы управления на контроллере Android Media в приложении AndroidЯ старался, но все равно не добился