为什么我的" String索引超出范围:53"错误?

时间:2016-10-18 18:40:38

标签: java string

我正在尝试使用我们在学校学到的一些基本代码来制作加密器。我已经设法到达某个地方(我想),但由于某种原因,我似乎得到了这个public void Encryption() { String Password = "CodingIsHard"; String answer = ""; for (int i = 0; i < Password.length(); i++) { answer = Character.toString(Password.charAt(i + '5')); } System.out.println(answer); } public static void main(String[] args) { PasswordGenerator GP = new PasswordGenerator(); GP.Encryption(); } 错误。谁能告诉我为什么?

Promise.all()

3 个答案:

答案 0 :(得分:2)

'5'是一个角色,而不是五号。在ASCII中,字符5的值为53,因此当i为零时,您尝试访问索引0 + 53,该字符串超出了字符串范围。您可能希望将添加移到charAt()括号之外。

答案 1 :(得分:1)

您要将'5'添加到charAt()要检索的索引中,请将代码更改为:

public void Encryption() {
    String Password = "CodingIsHard";
    String answer = "";
    for (int i = 0; i < Password.length(); i++) {
        answer = Character.toString(Password.charAt(i) + '5');

    }
    System.out.println(answer);
}

public static void main(String[] args) {
    PasswordGenerator GP = new PasswordGenerator();
    GP.Encryption();
}

答案 2 :(得分:0)

使用charAt时要小心。你的字符串“CodingIsHard”只有12个字母,你在For循环中所做的总和可以使这个数字高于字符串中的字母数。例如,如果i = 10且你总和为5,则i = 15.并且你在12个字母的字符串中没有位置15!此外,Java正在考虑您的'5'的ASCII值,53。考虑使用整数值(除非您的意图)。