2015-12-18 19 views
6

Tôi cần, bằng cách sử dụng một bộ đã xác định từ 2-4 chữ cái, tạo một chuỗi hoàn toàn ngẫu nhiên. Làm thế nào người ta có thể lấy chữ cái, kết hợp chúng thành một chuỗi, ngẫu nhiên vị trí của mỗi ký tự và sau đó biến chuỗi lớn thành hai chuỗi khác (nhưng> = 2) ngẫu nhiên. Cảm ơn sự giúp đỡ của mọi người.Ngẫu nhiên một chuỗi trong Java

Mã của tôi cho đến nay là:

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

    Collections.shuffle(arrayList); 

Nhưng tôi thấy rằng điều này shuffles các Strings và không được chứa chữ cá nhân. Nó cũng, là một mảng, có các dấu ngoặc sẽ không được tìm thấy bằng văn bản thông thường và tôi muốn nó trông giống như một loại ngẫu nhiên các chữ cái

+0

'Collections.shuffle' đến tìm – MadProgrammer

+0

Cảm ơn, đã giúp – Fool

+0

xin hiển thị những gì bạn đã cố gắng cho đến nay ... – Jan

Trả lời

2

Đây là một cách tiếp cận khá bạo lực, nhưng nó hoạt động. Nó xáo trộn các vị trí chỉ mục và ánh xạ chúng tới vị trí ban đầu.

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

Điều này rất hữu ích nhưng bạn có biết cách chia chuỗi này thành hai chuỗi có kích thước ngẫu nhiên không? – Fool

+0

Tôi đã cập nhật mã để hiển thị điều này. Giải pháp này cho phép khả năng 's1' hoặc' s2' có thể chứa tất cả các ký tự. –

0

Bạn có thể tạo chuỗi và sau đó trộn các ký tự từ chuỗi đó. Sử dụng Math.rand(), bạn có thể tạo một số ngẫu nhiên trong phạm vi độ dài của ký tự. Tạo nó cho mỗi nhân vật sẽ giúp bạn có được chuỗi xáo trộn. Kể từ mã của bạn là không rõ ràng, tôi sẽ chỉ cần viết một ví dụ

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

}

Các vấn đề liên quan