0

我已经制作了这段代码来加密文本并将新文本放在 TextView 中。当时我在想一种方法来做几件事。

  1. 如何使每个字母=< 29,因为只有那么多字母(在丹麦)

  2. 如何以一种方式更改第一个字母,以另一种方式更改第二个字母,以另一种方式更改第三个字母。下一个字母,第 4 个,应该像第一个字母一样改变,第 5 个像第 2 个,依此类推,例如“that” 改变 1,2,3 = “ujdu”

    C = Integer.valueOf(ceasarNr);
    String initialString = yourString.getText().toString();
    char[] chars = initialString.toCharArray();
    for (int i = 0; i < chars.length; ++i)
        chars[i] = (char)((int)chars[i] + C);
    String resultString = new String(chars);
    krypteredeTekst.setText(resultString);
    
4

1 回答 1

0

我相信您想为前 3 个字母中的每一个使用不同的凯撒键,然后为下一组三个字母重复相同的凯撒键,依此类推,对吗?

我不是 100% 确定如何处理不仅仅是我经常处理的标准 26 个字母表字符,但处理这个问题的一种方法是创建一个列表,其中的字符在列表中按顺序排列。如果您这样做,请务必将您的字符串切换为全小写,这样如果有大写字母,您就不会出现匹配错误

请不要我无法测试下面的代码,因此很容易出现错误(包括语法错误)有点难看)和一些事情应该移到他们自己的方法上。

List<String> characters = new ArrayList<String>();
...Fill the List with the alphabet in order here (best to do in it's own method)
String initialString = yourString.getText().toString().toLowercase();
char[] chars = initialString.toCharArray();
for (int i = 1; i <= chars.length; i++) {
    C = Integer.valueOf(ceasarNr1);
    if ( i%2 ==0 ) C = Integer.valueOf(ceasarNr2);
    if ( i%3 ==0 ) C = Integer.valueOf(ceasarNr3);

    chars[i-1] = characters.get((characters.indexOf(chars[i-1]) + C)%29);
}
String resultString = new String(chars);
krypteredeTekst.setText(resultString);
于 2013-04-29T09:33:40.907 回答