我有一个char数组(大小为12),看起来像这样:
{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'}
我想(以最有效的方式)创建一个String,它将从数组中获取字符并随机排序(让我们使用该单词),例如:
“ahbejclfkdig”
我尝试使用StringBuffer和随机放置的解决方案,但是存在重复位置的问题。此外,我尝试了Collections.shuffle,但我不太了解这个。我也看了线性反馈移位寄存器,但我认为这不合适。这是非常简单的情况,我不会操作大数,所以内存分配和速度不应该引起任何重大问题。
答案 0 :(得分:3)
您可以使用shuffle但是为StringBuilder更改它。除非你必须使用旧版本的Java,否则我不会使用StringBuffer。
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
答案 1 :(得分:1)
以下使用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);
}
}
答案 2 :(得分:0)
您可以在Java API中查找Random类。这将使您能够创建随机数组索引。因此,您可以按随机顺序从数组中选择字符。
答案 3 :(得分:0)
String randomize(char[] letters) {
String newString = new String[letters.length];
for (int i = 0; i <= letters.length; i++) {
int randomChar = Math.floor(Math.random() * letters.length);
newString[i] = letters[randomChar];
}
return newString;
}
答案 4 :(得分:0)
我尝试过以下代码...我想你可以在你的场景中使用它!
String[] alphabets = new String[12];
int i = 0;
char[] arrayAlpha = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'};
for (char ch : arrayAlpha) {
alphabets[i++] = String.valueOf(ch);
}
List<String> list = Arrays.asList(alphabets);
Collections.shuffle(list);
for (String alpha : list) {
System.out.print(alpha + " ");
}