Collections.shuffle没有按预期工作

时间:2012-10-12 05:51:52

标签: java arrays shuffle

我正在尝试编写一个简单的加密算法,这是一种随机移位模式加密。我把它写成基于所有字符的数组然后使用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 个答案:

答案 0 :(得分:5)

您不是在改组数组,而是使用数组创建的List。在将其发送到随机播放之前创建列表:

//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);
}

答案 1 :(得分:1)

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

此列表现在被洗牌,其中包含alphashuff的值。

使用它像 - output = output + list.get(n);