生成密码字母

时间:2016-01-30 05:37:32

标签: java arrays caesar-cipher

我将根据用户输入的shift键生成密码字母(基于Caesar Cipher),而我的代码似乎是错误的。

我不明白我的cipherAlphabet方法有什么问题,因为每当我尝试测试结果时,它最终都会给我一个" java.lang的错误。 ArrayIndexOutOfBoundsException:26 。"

所以,它可能与我设置的数组有关,但我看不到这一点。我知道这可能是非常简单的事情,但有人可以帮助我吗?

P.S。 - 我试图寻找SO和其他网站上的现有提示以获得一些帮助,但无济于事。

我会在一种方法中进行所有的转换和加密,但我无法做到这一点(显然,我必须这样做)。这就是我所拥有的:

private String message;
private static int shiftKey;
public static final String[] ALPHABET = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "N",
                                         "M", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
public static String[] cipherAlphabet = new String[ALPHABET.length];

/**
 * Constructor for objects of class CaesarShiftEncryption
 */
public CaesarShiftEncryption(String m, int shift)
{
    message = m;
    shiftKey = shift;
}

public static String[] cipherAlphabet()
{
    for(int i = 0; i < ALPHABET.length; i++)
    {
        if(i >= 23)
        {
            cipherAlphabet[i] += ALPHABET[26 - shiftKey];
        }
        else
        {
            cipherAlphabet[i] += ALPHABET[i + shiftKey];
        }
    }
    return cipherAlphabet;
}

1 个答案:

答案 0 :(得分:1)

你需要重新开始!尝试这样的事情,使用mod操作,如果碰巧碰到结束,你将在字母表的开头重新启动

cipherAlphabet[i] += ALPHABET[(i + shiftKey) % ALPHABET.length]