java For循环未阅读字符串中的最后一个字符

sg3maiej  于 2023-03-21  发布在  Java
关注(0)|答案(2)|浏览(108)

我试图编写一个基本的密钥密码,但我遇到了一个问题,for循环没有阅读最后一个字符:

public static void main(String[] args) {

    BasicEncrypt.encrypt("abcdef", 1);}

public class BasicEncrypt {

    public static String encrypt(String text, int rule) {

        String code = "";
        int i;
        for(i = 0; i < text.length() -1; i++) {
            if ((text.charAt(i) + rule) > 255) {
                code = code + (char) (text.charAt(i) + rule - 255);
            } else if (text.charAt(i) + rule <= 255) {
                code = code + text.charAt(i) + rule);
            }
        }

        return code;
    }
}

代码返回除了最后一个字符以外的所有字符。如果输入字符串是一个字符('a'),则返回空。
我将循环改为下面的代码,并得到一个索引越界错误(这是ofc有意义的):

for(i = 0; i < text.length(); i++)

我知道这是一个非常基本的问题,但我找了大约一个小时后,在这里找不到我的答案。

oxiaedzo

oxiaedzo1#

正确的for循环是for(i = 0; i < text.length(); i++)

} else if (text.charAt(i) + rule <= 255) {
    code = code + text.charAt(i + rule);
}

} else if (text.charAt(i) + rule <= 255) {
    code = code + text.charAt(i) + rule;
}

在你改正之后,你移动了你犯过的错误一次,又犯了同样的错误。四次。这

if (text.charAt(i + rule) > 255) {
    code = code + (char) (text.charAt(i + rule) - 255);
} else if (text.charAt(i + rule) <= 255) {
    code = code + text.charAt(i + rule);
}

rule大于0时,i + rule总是会给予你一个越界异常,因为itext中所有有效索引的范围。

if (text.charAt(i) + rule > 255) {
    code = code + (char) (text.charAt(i) + rule - 255);
} else if (text.charAt(i) + rule <= 255) {
    code = code + text.charAt(i) + rule;
}

让你的生活更简单就像

char ch = text.charAt(i);
if (ch + rule > 255) {
    code += ch + rule - 255;
} else {
    code += ch + rule;
}
dwbf0jvd

dwbf0jvd2#

如果你想迭代一个名为text的字符串,你必须从0开始到text.length-1,在这种情况下,你的条件将像这样:i〈= text.length否则,如果你只使用“〈”,最后一个索引不计数,它应该是这样的:for(i = 0; i〈text.length();i++)

相关问题