2016-01-02 8 views
5

私は、ユーザのためにランダムなアカウント名を生成するプログラムを作ろうとしています。ユーザーがボタンを押すと、アカウント名がクリップボードにコピーされます。それのGUI部分は動作していますが、文字列のランダム生成を処理する最良の方法は考えられません。ユーザ名に厳しい制約のあるランダムな文字列を生成するアルゴリズム - Java

可文字:A-Z-Zは_

いいえ数、他のシンボル、および行の同じ文字のどの2つが発生しないことができます。

長さ6でなければなりません。

私の考え:

create an array of characters: 

[ _, a, b, c, d ... etc ] 

Generate a random integer between 0 and array.length - 1 
and pick the letter in that slot. 

Check the last character to be added into the output String, 
and if it's the same as the one we just picked, pick again. 

Otherwise, add it to the end of our String. 

Stop if the String length is of length six. 

は、より良い方法はありますか?多分正規表現で?私はここでそれをやっていると思っている方法が本当に悪いと感じている。

+1

、のようなものでそれを呼び出すことができますか? – user1803551

+0

なぜあなたはより良い方法が必要ですか?あなたの考えは何が間違っていますか?シンプルですが、それはあなたの必要条件に合っています。 – user3707125

+2

重要な制約を忘れている可能性があります。同じ名前の2人のユーザーを持つことはできません。ユーザーが自分の名前を選んでもらうのはなぜですか?アカウント名を忘れてしまったユーザーの絶え間ない要求に備えて準備してください。 –

答えて

3

あなたが提案したアルゴリズムに何か問題はありません。追加した最初の文字は、追加したかどうか確認せずに処理する必要があります。あなたはまた、staticメソッドにそれを抽出し、Random

、などの
static Random rand = new Random(); 

static String getPassword(String alphabet, int len) { 
    StringBuilder sb = new StringBuilder(len); 
    while (sb.length() < len) { 
    char ch = alphabet.charAt(rand.nextInt(alphabet.length())); 
    if (sb.length() > 0) { 
     if (sb.charAt(sb.length() - 1) != ch) { 
     sb.append(ch); 
     } 
    } else { 
     sb.append(ch); 
    } 
    } 
    return sb.toString(); 
} 

を使用する場合があります次に、あなただけの `a_a_a_`は結構です、明確にすること

public static void main(String[] args) { 
    StringBuilder alphabet = new StringBuilder(); 
    for (char ch = 'a'; ch <= 'z'; ch++) { 
    alphabet.append(ch); 
    } 
    alphabet.append(alphabet.toString().toUpperCase()).append('_'); 
    String pass = getPassword(alphabet.toString(), 6); 
    System.out.println(pass); 
} 
+0

Stringbuilderの良いアイデアです。私はそれが存在するのを忘れた。ありがとう! – Hatefiend

関連する問題