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

标签 java indexoutofboundsexception

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

我目前一直在检查加密消息(用户输入的)并通过将其与解码器数组匹配来逐个解码每个字母。即使在我设置的 for 循环中,我已经从消息长度中减去 1 以补偿它从 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.
    }
}

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

最佳答案

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

  1. 如果需要比较char,可以直接使用to ==运算符,无需使用String.ValueOf()将其转换为字符串.

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

关于java - 即使我的 for 循环计数器通过减去 1 来调整长度,我仍然得到 "java.lang.StringIndexOutOfBoundsException",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60388623/

相关文章:

java - 从 Windows 和 Linux 读取文件会产生不同的结果(字符编码?)

java - ReactFX - "lazy"实时搜索文本区域

java - 为什么JFrame的这个函数执行了两次?

java - 正则表达式检查java中以字符 '@'开头的单词的出现

java - 当存在 XML 注释而不是元素时,Jackson XML 反序列化失败

java - Android:Snackbar 给出 ArrayIndexOutOfBoundsException

java - 有没有办法将 ArrayIndexOutOfBoundsException 导致值替换为某个默认值?

java - 为什么下面的代码没有抛出IndexOutOfBoundsException,并打印出9 9 6?

java - 某些输入值的 ArrayIndexOutOfBounds 异常

mysql - Hibernate 选择空对象