我得到了一个字符数组(大小为12),如下所示:
{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'} 我想(以最有效的方式)创建一个字符串,它是从数组中提取字符并随机排序的结果(让我们使用这个词),例如:
“ahbejclfkdig”我尝试了StringBuffer和随机放置的解决方案,但存在位置重复的问题。另外,我也试过Collections.shuffle,但我不太理解这个。我也研究了线性反馈移位寄存器,但我认为这里并不合适。这是非常简单的情况,我不会在大数字上操作,所以内存分配和速度应该不会引起任何重大问题。
发布于 2011-08-17 18:43:53
您可以使用shuffle,但将其更改为StringBuilder。除非你不得不使用旧版本的StringBuffer,否则我不会使用Java。
public static void main(String... args) {
StringBuilder sb = new StringBuilder("abcdefghijkl");
for (int i = 0; i < 5; i++) {
shuffle(sb);
System.out.println(sb);
}
}
public static void shuffle(StringBuilder sb) {
Random rand = new Random();
for (int i = sb.length() - 1; i > 1; i--) {
int swapWith = rand.nextInt(i);
char tmp = sb.charAt(swapWith);
sb.setCharAt(swapWith, sb.charAt(i));
sb.setCharAt(i, tmp);
}
}打印
kbljdhieagcf
gefabkhdclij
hbkfjilcgade
eacihdkjfgbl
hbjcfegdilka发布于 2011-08-17 18:57:13
下面的代码使用了Collections.shuffle:
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Shuffle {
public static void main(String[] args) {
Character[] letters = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'};
List<Character> shuffled = Arrays.asList(letters);
Collections.shuffle(shuffled);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < shuffled.size(); i++) {
sb.append(shuffled.get(i));
}
System.out.println(sb);
}
}发布于 2011-08-17 18:43:41
您可以在Java API中查找Random类。这将使您能够创建随机数组索引。因此,您可以按随机顺序从数组中选取字符。
https://stackoverflow.com/questions/7091436
复制相似问题