2015-12-18 24 views
6

すでに定義されている2〜4文字のセットを使用して、完全にランダム化された文字列を作成する必要があります。どのように文字を取り込み、それらを1つの文字列に結合し、各文字の位置をランダム化し、次にその大きな文字列を2つのランダムなサイズ(ただし> = 2)の他の文字列に変換します。誰もが助けてくれてありがとう。Javaで文字列をランダム化する

//shuffles letters 
    ArrayList arrayList = new ArrayList(); 
    arrayList.add(fromFirst); 
    arrayList.add(fromLast); 
    arrayList.add(fromCity); 
    arrayList.add(fromSong); 

    Collections.shuffle(arrayList); 

しかし、私は、これは文字列ではなく個々の文字をシャッフルことがわかった:

これまでに私のコードです。また配列であり、通常の文章では見つからない括弧があり、ランダムな文字のように見えます。

+0

'Collections.shuffle'は何 – MadProgrammer

+0

おかげで、... – Fool

+0

は、あなたがこれまでに試したものをご提示ください助け – Jan

答えて

2

これは非常に強力なアプローチですが、これは機能します。インデックス位置をシャッフルし、元の位置にマッピングします。

final String possibleValues = "abcd"; 
    final List<Integer> indices = new LinkedList<>(); 
    for (int i = 0; i < possibleValues.length(); i++) { 
     indices.add(i); 
    } 
    Collections.shuffle(indices); 

    final char[] baseChars = possibleValues.toCharArray(); 
    final char[] randomChars = new char[baseChars.length]; 
    for (int i = 0; i < indices.size(); i++) { 
     randomChars[indices.get(i)] = baseChars[i]; 
    } 
    final String randomizedString = new String(randomChars); 
    System.out.println(randomizedString); 

    final Random random = new Random(); 
    final int firstStrLength = random.nextInt(randomChars.length); 
    final int secondStrLength = randomChars.length - firstStrLength; 
    final String s1 = randomizedString.substring(0, firstStrLength); 
    final String s2 = randomizedString.substring(firstStrLength); 

    System.out.println(s1); 
    System.out.println(s2); 
+0

これは非常に役に立ちましたが、この文字列を2つのランダムなサイズの文字列に分割する方法を知っていますか? – Fool

+0

これを示すコードを更新しました。この解決法は、 's1'または' s2'のいずれかがすべての文字を含む可能性を与えます。 –

0

文字列を作成し、その文字列から文字をシャッフルすることができます。 Math.rand()を使うと、文字の長さの範囲内で乱数を生成することができます。それぞれのキャラクターのためにそれを生成すると、シャッフルされた文字列が得られます。あなたのコードが不明であるので、私はちょうど例

public class ShuffleInput { 

public static void main(String[] args) { 
    ShuffleInput si = new ShuffleInput(); 
    si.shuffle("input"); 

} 
public void shuffle(String input){ 
    List<Character> chars = new ArrayList<Character>(); 

    for(char c:input.toCharArray()){ 
     chars.add(c); 
    } 

    StringBuilder output = new StringBuilder(input.length()); 

    while(chars.size()!=0){ 
     int rand = (Integer)(Math.random()*characters.size()); 
     output.append(characters.remove(rand)); 
    } 
    System.out.println(output.toString()); 
} 

}を書きます

関連する問題