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

问题描述 投票:0回答:1
因此,我的主要目标是创建一个可以解密凯撒密码的程序。我已经进行了所有设置,以便在一个数组中设置了常规字母,然后在一个解码器数组中根据用户输入的移位/键对字母进行了移位。 (即,如果用户输入的移位为6,则常规字母数组以a,b,c ...开头,然后解码器数组以g,h,i ...开头)。

目前,我一直在浏览加密的消息(用户输入),并通过将每个字母与解码器数组进行匹配来对每个字母进行解码。即使在我设置的for循环中,我也一直给我一个超出范围的索引错误,我从消息的长度中减去了一个,以补偿从0开始的错误。

错误也只会在最后一个字符处发生(这就是35。这是我要测试的35字符串)。但是,当我尝试打印解码后的消息直到出现错误时,我只是得到null(我将每个解码后的char存储在数组中,并在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. } }

我尚未添加任何空格检查功能,因为我目前仍停留在此错误上,但是如果您可以添加任何错误,将不胜感激。我不确定将char与空格进行比较是否可行。

因此,我的主要目标是创建一个可以解密凯撒密码的程序。我已经进行了所有设置,以便将常规字母设置在一个数组中,然后将解码器数组设置在其中,我将其移位了...

java indexoutofboundsexception
1个回答
0
投票
根据问题中的当前代码,我可以说您的代码有2个问题,

  1. 您正在将字符串与==进行比较,这将不起作用。相反,您需要使用Java的equals()方法。
© www.soinside.com 2019 - 2024. All rights reserved.