2011-02-10 67 views
7

Tôi đã viết một chương trình có thể sắp xếp các từ và xác định bất kỳ đảo chữ cái nào. Tôi muốn tạo ra một chuỗi các chuỗi ngẫu nhiên để tôi có thể kiểm tra thời gian chạy của phương thức của tôi.Tạo các từ ngẫu nhiên trong Java?

public static String[] generateRandomWords(int numberOfWords){ 
String[] randomStrings = new String[numberOfWords]; 
Random random = Random(); 
    return null; 
} 

(phương pháp sơ khai)

Tôi chỉ muốn từ chữ thường có độ dài 1-10. Tôi đọc một cái gì đó về việc tạo ra các số ngẫu nhiên, sau đó đúc để char hoặc một cái gì đó, nhưng tôi đã không hoàn toàn hiểu được. Nếu ai đó có thể chỉ cho tôi cách tạo các từ ngẫu nhiên, thì tôi sẽ dễ dàng có thể sử dụng vòng lặp for để chèn các từ vào mảng. Cảm ơn!

+0

từ ngẫu nhiên dựa trên những gì nguồn? (ví dụ: số ngẫu nhiên + ???? = từ ngẫu nhiên) –

+0

Bài tập về nhà? –

Trả lời

15

Bạn có cần từ tiếng Anh thực sự hay chỉ các chuỗi ngẫu nhiên chỉ chứa chữ cái a-z?

Nếu bạn cần từ tiếng Anh thực sự, cách duy nhất để làm điều đó là sử dụng từ điển và chọn từ ngẫu nhiên.

Nếu bạn không cần phải từ tiếng Anh, sau đó một cái gì đó như thế này sẽ làm:

public static String[] generateRandomWords(int numberOfWords) 
{ 
    String[] randomStrings = new String[numberOfWords]; 
    Random random = new Random(); 
    for(int i = 0; i < numberOfWords; i++) 
    { 
     char[] word = new char[random.nextInt(8)+3]; // words of length 3 through 10. (1 and 2 letter words are boring.) 
     for(int j = 0; j < word.length; j++) 
     { 
      word[j] = (char)('a' + random.nextInt(26)); 
     } 
     randomStrings[i] = new String(word); 
    } 
    return randomStrings; 
} 
+0

Cảm ơn! Một điều bạn cần phải được đúc 'a' để char hoặc trình biên dịch khác freaks ra ở bạn. Cảm ơn mọi người! –

+1

Không, bạn không cần phải đúc ''a'' thành' char', nhưng kết quả của phần bổ sung (vì đây là tự động 'int'). Vì vậy, nó phải là trong thực tế 'word [j] = (char) ('a' + random.nextInt (26)); ' –

+0

Cảm ơn sự sửa chữa, nó được một lúc kể từ khi tôi làm việc với các ký tự thô trong Java. –

1

Tại sao tạo từ ngẫu nhiên? Khi bạn có thể sử dụng some dictionaries.

+1

Tôi đang cố gắng có thời gian chạy trung bình, do đó các từ được tạo ngẫu nhiên sẽ mang lại cho tôi mức trung bình tốt nhất. Ngoài ra, đây là nhiệm vụ của trường, vì vậy tôi phải tuân theo những gì giáo viên của tôi muốn ... –

+1

bạn nên chỉ định điều đó và gắn thẻ câu hỏi của bạn là "bài tập về nhà" –

+0

Ồ, xin lỗi tôi thậm chí không biết đó là danh mục , nhưng tôi cho rằng điều đó sẽ có ý nghĩa hoàn hảo. Tôi chắc chắn sẽ làm điều đó vào lần sau. –

8

RandomStringUtils từ commons-lang

+2

Liên kết đã chết. – Timo

+0

Liên kết mới, không còn chết nữa. –

1

Nếu bạn muốn từ ngẫu nhiên mà không sử dụng một cuốn từ điển ...

  1. Tạo một danh sách tất cả các chữ cái bạn muốn có thể trong lời nói của bạn
  2. Tạo ngẫu nhiên chỉ mục để chọn một thư từ danh sách
  3. Lặp lại cho đến khi bạn có độ dài từ mong muốn

Lặp lại các bước này cho số từ bạn muốn tạo.

3

Nếu bạn muốn tạo các từ ngẫu nhiên có độ dài nhất định, bạn cần có thuật toán để xác định xem chuỗi đã cho là từ (cứng) hay truy cập vào danh sách từ của tất cả các từ trong một ngôn ngữ cụ thể (dễ dàng). Nếu được, here's a list of every word in the Scrabble dictionary.

Khi bạn có danh sách tất cả các từ trong một ngôn ngữ, bạn có thể tải những từ đó vào một cấu trúc tuyến tính ArrayList hoặc khác. Sau đó bạn có thể tạo một chỉ mục ngẫu nhiên vào danh sách đó để lấy từ ngẫu nhiên.

1

Bạn có thể gọi phương thức này cho từng từ bạn muốn tạo. Lưu ý rằng xác suất tạo ra đảo chữ cái nên tương đối thấp mặc dù.

String generateRandomWord(int wordLength) { 
    Random r = new Random(); // Intialize a Random Number Generator with SysTime as the seed 
    StringBuilder sb = new StringBuilder(wordLength); 
    for(int i = 0; i < wordLength; i++) { // For each letter in the word 
     char tmp = 'a' + r.nextInt('z' - 'a'); // Generate a letter between a and z 
     sb.append(tmp); // Add it to the String 
    } 
    return sb.toString(); 
} 
+1

+1 nhưng tôi sẽ đề nghị sử dụng 'StringBuilder' thay vì làm' out + = ...' – casablanca

+0

@casablanca Sẽ không trình biên dịch tối ưu hóa thuật toán của mình để sử dụng StringBuilder? –

+0

@Kin Tôi chắc chắn rằng nó sẽ không được tối ưu hóa. – whiskeysierra

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