【发布时间】:2010-11-22 16:41:35
【问题描述】:
我想打乱一个字符串,让它不可读,所以想出了这个方法:
public String scrambleWord(String start_word){
char[] wordarray = start_word.toCharArray();
char[] dummywordarray = start_word.toCharArray();
Random random = new Random();
int r = random.nextInt(wordarray.length-1);
int i = 0;
int j = r+1;
while(i <= r){
dummywordarray[wordarray.length -i-1] = wordarray[i];
i++;
}
while (j <= wordarray.length -1){
dummywordarray[j-r-1] = wordarray[j];
j++;
}
String newword = String.valueOf(dummywa);
return newword;
所以我首先将字符串转换为 char 数组,在我的方法中我必须复制 char 数组“dummywordarray”。通过这个算法,单词的每个字母都会改变位置。但它不会被打乱得很好,从某种意义上说,你一眼就能把它重新组合起来。 所以我通过该方法传递了一个少于 9 个字符的给定字符串 7 次,并且这些单词被打乱得很好,即不可读。 但是我用一个 30 个字符的字符串尝试了它,它经过了 500 次传递,然后我才能保证它被很好地打乱了。 500! 我确定有更好的算法,我想要一些建议 a) 改进此方法 或者 b) 更好的方法。
【问题讨论】:
-
你所说的“很好地乱码”是什么意思
-
您是否只需要单向随机播放字母,以后将无法恢复?或者你真的想要一个密码来创建一个可逆的洗牌?
-
很好地打乱是相当主观的。对不起,我不能给你一个正确的定义。如果原来的词是麻烦制造者,那么 makerelbuort、tromakbleuer 就不是“很好地打乱了。你可以在五秒钟后把它们放回去。
-
不需要反转。我只想要一个高效的洗牌。
-
@JJG:随机性的本质是有时“麻烦制造者”会被随机打乱为“麻烦制造者”。人类大脑在“洗牌”的不同阶段解决字谜或混乱的能力是一个更大的问题,与编程 IMO 几乎没有关系。