2011-08-17 49 views
0

我有一个字符数组(大小12),可以是这样的:以从阵列字符,并把它们随意创建字符串

{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'} 

而且我想创建(以最有效的方式)这将是从阵列以人物和命令他们〜随机结果的字符串(让我们用这个词),例如:

“ahbejclfkdig” 

我试图解决方案的StringBuffer和随机摆放,但有问题的位置重复。另外,我尝试了Collections.shuffle,但我没有完全理解这个工作。我也看过线性反馈移位寄存器,但我认为这里不合适。这是非常简单的情况,我不会大量运行,所以内存分配和速度不应该引起任何重大问题。

+0

Collections.shuffle解决方案是最直接的解决方案。向我们展示您尝试的代码,我们可能会帮助您告诉您有什么问题。 – 2011-08-17 10:48:04

回答

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 
+0

我认为洗牌在ArrayLists,而不是阵列..? – Hurdler 2011-08-17 10:47:27

0

您可以在Java API中查找Random类。这将使您能够创建随机数组索引。所以你可以随机选择数组中的字符。

+0

这个问题是确保你没有任何重复。 ;) – 2011-08-17 10:49:30

+0

@Peter:没问题,有人在SO谁会关心和交付完整的代码,准备Cut'n粘贴:) – Ingo 2011-08-17 10:55:56

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

} 
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 + " "); 
}