Collections.shuffle不按预期工作

3
我想编写一个简单的加密算法,使用随机移位模式加密。我已经编写了一个基于所有字符数组的算法,然后使用Collections.shuffle进行混淆,并将其与之匹配。然而,该数组似乎没有被混淆,因为输出文本与输入相同。
这是我的方法:
static void encrypt(String s)
    {
        //Define variable for indexOf output
        int n;

        //Encrypted output
        String output = "";

        //Shuffle array to create random replacements
        Collections.shuffle(Arrays.asList(alphashuff));

        //Create new string
        String alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

        for (int index = 0; index < s.length();index++)
        {
            char aChar = s.charAt(index);
            n = alpha.indexOf(aChar, 0);

            if(n == -1)
            {
                output = output + aChar;
            }
            else
            {
                output = output + alphashuff[n];
            }

        }

        //Print encrypted string to console
        System.out.println("Encrypted Text: " + output);
    }
2个回答

5

您没有对数组进行洗牌,而是创建了使用该数组的列表。在将其发送到shuffle之前,请先创建列表:

//I'm assuming alphashuff is a char[]
List<Character> lstCh = new ArrayList<Character>();
for(char c : arrCh) {
    lstCh.add(c);
}
Collections.shuffle(lstCh);
//...
else
{
    output = output + lstCh.get(n);
}

你可以使用 Arrays.asList 函数来创建列表。 - Subhrajyoti Majumder
@Quoi 那将是一个 List<Object> - Luiggi Mendoza
@LuiggiMendoza - 但是Arrays.asList返回List<T>。 - Subhrajyoti Majumder
@Quoi ArrayUtils 是 Java 的原生类吗?我认为它是来自于 Apache Commons Lang。 - Luiggi Mendoza
@Quoi 那么就没有 Java 本地的方法可以实现它了 :). OP 没有提到他/她使用那个库。当然,那将是非常有帮助的,但它超出了问题的范围。 - Luiggi Mendoza
显示剩余3条评论

1
String[] alphashuff = ...;
List list = Arrays.asList(alphashuff);
Collections.shuffle(list);

这个列表现在被打乱了,其中包含了alphashuff的值。

然后可以像这样使用 - output = output + list.get(n);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接