【发布时间】:2015-01-04 21:21:59
【问题描述】:
我正在尝试取消混洗复合混洗列表。我无法弄清楚如何做到这一点。
public static void main(String[] args) {
// Setup random
Random rand = new Random();
rand.setSeed(5);
// Setup list
ArrayList<Character> list = new ArrayList<Character>(Arrays.asList('v','y','2','w','9','n','8','v','a'));
// Compound shuffle list
for(int i=0;i<5;i++)
Collections.shuffle(list, rand);
// un-shuffle list
// TODO
}
还有我的 un-shuffle 方法。
private static void unshuffle(ArrayList<?> list, Random rand) {
// Create the sequence backwards
int[] seq = new int[list.size()];
for(int i=seq.length; i>1; i--)
seq[i-1] = rand.nextInt(i);
// Traverse the sequence and swapping it inversely
for (int i=0; i<seq.length; i++)
Collections.swap(list, i, seq[i]);
}
编辑:固定 ArrayList。
【问题讨论】:
-
当你说“unshuffle”时,你的意思是“sort”吗?就像您试图让
list恢复其自然秩序一样? -
是的,我正在尝试将列表恢复到原来的顺序。
-
听起来像功课
-
它实际上是我正在做的加密的一部分。
-
编写自己的加密通常被认为是一个坏主意(tm)。 security.stackexchange.com/questions/18197/…