首页 > 解决方案 > 即使我的 for 循环计数器通过减去 1 来调整长度,我仍然收到“java.lang.StringIndexOutOfBoundsException”

问题描述

所以我的主要目标是创建一个可以解密凯撒密码的程序。我已经设置好所有东西,以便在一个数组中设置常规字母表,然后在解码器数组中根据用户输入的移位/键移动字母表。(即,如果用户输入 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.
    }
}

我还没有添加任何对空格的检查,因为我目前遇到了这个错误,但是如果你们中的任何人都可以添加,那将不胜感激。我不确定将字符与空格进行比较是否可行。

标签: javaindexoutofboundsexception

解决方案


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

  1. 如果需要比较char,可以直接使用 to == 操作符,不需要通过 using 将其转换为字符串String.ValueOf()

  2. x在第二个循环中递增,而不是您需要递增y


推荐阅读