Я продолжаю получать «java .lang.StringIndexOutOfBoundsException», хотя мой счетчик для l oop корректирует длину, вычитая 1 - PullRequest
3 голосов
/ 25 февраля 2020

Итак, моя главная цель - создать программу, которая сможет расшифровать шифр Цезаря. У меня все настроено так, что у меня есть обычный алфавит, настроенный в одном массиве, а затем массив декодеров, где я сместил алфавит на основе клавиши Shift / Key, которую вводит пользователь. (ie. Если пользователь вводит сдвиг 6, массив регулярных алфавитов начинает a, b, c ... и затем массив декодеров запускает g, h, i ...).

В настоящее время я застрял при прохождении зашифрованного сообщения (введенного пользователем) и декодировании каждой буквы одна за другой, сопоставляя ее с массивом декодера. Он продолжает давать мне ошибку индекса за пределами границ, хотя в установленном мною для l oop я вычел одно из длины сообщения, чтобы компенсировать его, начиная с 0.

. ошибка происходит только в последнем символе (это то, что 35. У меня есть строка из 35 символов, которую я использую для тестирования). Но когда я пытаюсь распечатать декодированное сообщение вплоть до ошибки, я просто получаю нулевые значения (я сохраняю каждый декодированный символ в массиве и печатаю каждый символ, сохраненный при выполнении команды l oop).

Вот фрагмент кода, на котором я сейчас застрял:

//Decoding message by looping through each letter in String message
for (int x = 0; x < (message.length() - 1); x ++) //Gets next letter in message
{
    for (int y = 0; y < (decodedArray.length - 1); x++) //Goes through decodedArray array
    {
        if (String.valueOf(message.charAt(x)) == (decodedArray[y])) //Comparing character to each position in decodedArray
        {
            decodedMessage[x] = alphabetArray[y];
        }
        System.out.print(decodedMessage[x]); //Testing only. Prints each character stored in array but only printing nulls.
    }
}

Я еще не добавил никаких проверок пробелов, потому что в данный момент я застрял на этой ошибке, но если Любой из вас может добавить это, это было бы очень признательно. Я не уверен, сработает ли сравнение символа с пробелом.

1 Ответ

4 голосов
/ 25 февраля 2020

Согласно текущему коду в вопросе, я могу сказать, что с вашим кодом есть 2 проблемы:

  1. Если вам нужно сравнить char, вы можете напрямую использовать для = = оператор без необходимости его преобразования в строку с помощью String.ValueOf().

  2. Вы увеличиваете x во 2-м l oop, вместо этого вам нужно увеличить y

...