我总是得到一个“答案”;java.lang.StringIndexOutOfBoundsException“;即使我的for循环计数器通过减去1来调整长度

我总是得到一个“答案”;java.lang.StringIndexOutOfBoundsException“;即使我的for循环计数器通过减去1来调整长度,java,indexoutofboundsexception,Java,Indexoutofboundsexception,所以我的主要目标是创建一个可以解密凯撒密码的程序。我把所有的东西都设置好了,这样我就在一个数组中设置了常规的字母表,然后在一个解码器数组中,我根据用户输入的移位/键对字母表进行了移位。(即,如果用户输入6的移位,则常规字母表数组开始a、b、c…然后解码器数组开始g、h、i…) 我目前一直在浏览加密信息(用户输入)并通过匹配解码器阵列逐个解码每个字母。它一直给我一个索引越界错误,即使在我设置的for循环中,我从消息长度中减去了一个,以补偿从0开始的索引越界错误 错误也只发生在最后一个字符处(这就是

所以我的主要目标是创建一个可以解密凯撒密码的程序。我把所有的东西都设置好了,这样我就在一个数组中设置了常规的字母表,然后在一个解码器数组中,我根据用户输入的移位/键对字母表进行了移位。(即,如果用户输入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.
    }
}
//通过循环遍历字符串消息中的每个字母来解码消息
for(int x=0;x<(message.length()-1);x++)//获取消息中的下一个字母
{
for(int y=0;y<(decodedArray.length-1);x++)//通过decodedArray数组
{
if(String.valueOf(message.charAt(x))==(decodedArray[y])//将字符与decodedArray中的每个位置进行比较
{
decodedMessage[x]=字母数组[y];
}
System.out.print(decodedMessage[x]);//仅测试。打印存储在数组中的每个字符,但仅打印空字符。
}
}

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

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

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

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


  • 首先,您使用
    ==
    来比较字符串,这是不正确的;使用
    =
    直接比较
    字符的值。你能不能也添加decodedMessage,我猜它是一个字符串?我不太确定你的问题,但你不能得到移位值,然后尝试回溯。@chrylis onstrike-他正在使用
    =
    比较
    字符的值,不是
    字符串
    。使用调试器或放入大量打印语句。for语句可能应该是for(int i;i字符
    ==
    进行比较,而不是“字符串”。你的第二点是正确的。天哪。我已经盯着这段代码看了一个多小时,试图找出它不起作用的原因。你是对的ht…我在第二个循环中增加了x,这就是问题的原因。我也修复了比较。我刚刚将所有内容转换为char。@user207421抱歉,他使用的是String.valueOf(),因此我认为他在比较字符串。@Nelly_Boi18如果回答了您的问题,您可以接受答案;)@user207421-左字符被包装在
    String.valueOf
    中,因此我相信他正在检查字符串(尽管是一个1字符字符串)和字符的值相等性,这将始终为false。