我一直得到 "java.lang.StringIndexOutOfBoundsException",即使我的 for 循环计数器通过减去 1 来调整长度

I keep getting a "java.lang.StringIndexOutOfBoundsException" even though my for loop counter adjusts for length by subtracting 1

所以我的主要目标是创建一个可以解密凯撒密码的程序。我已设置好所有内容,以便在一个数组中设置常规字母表,然后在解码器数组中设置一个解码器数组,其中我根据 shift/key 用户输入移动了字母表。 (即,如果用户输入 6 的移位,则常规字母表数组从 a、b、c... 开始,然后解码器数组从 g、h、i... 开始)。

我目前坚持通过加密消息(用户输入)并通过将其与解码器数组匹配来逐个解码每个字母。它一直给我一个索引越界错误,即使在我设置的 for 循环中,我已经从消息的长度中减去一个以补偿它从 0 开始。

错误也只发生在最后一个字符(这就是 35 的含义。我有一个 35 个字符的字符串用于测试)。但是当我尝试打印解码消息直到出现错误时,我只是得到空值(我将每个解码字符存储在一个数组中并打印每个存储的字符,因为 for 循环是 运行)。

这是我目前卡住的代码片段:

//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.
    }
}

我还没有为 space 添加任何检查,因为我目前被困在这个错误上,但如果你们中的任何人可以添加它,我们将不胜感激。我不确定将 char 与 space 进行比较是否可行。

根据问题中的当前代码,我可以说您的代码有 2 个问题,

  1. 如果需要比较char,可以直接使用==运算符,不需要用String.ValueOf().

    转成字符串
  2. 您在第二个循环中递增 x,而您需要递增 y