Student
というオブジェクトがあり、studentName
、studentId
、studentAddress
などのオブジェクトがあります。studentId
については、 7つの数値文字。
studentId = getRandomId();
studentId = "1234567" <-- from the random generator.
そして、IDが重複していないことを確認する必要があります。
ランダムな文字列の生成は簡単です-Java.util.Random
と、使用可能にするすべての文字を含む文字列を使用するだけです。
public static String generateString(Random rng, String characters, int length)
{
char[] text = new char[length];
for (int i = 0; i < length; i++)
{
text[i] = characters.charAt(rng.nextInt(characters.length()));
}
return new String(text);
}
ここで、一意性のために、生成された文字列をどこかに保存する必要があります。それをどのように行うかは、アプリケーションの他の部分に依存します。
これはすごく素敵:
(高い確率で)一意性が必要な場合は、MD5またはSHAハッシュの使用を検討してください。
Java.utilパッケージのUUIDクラスを使用することもできます。このパッケージは、32ビット文字列のランダムなuuidを返します。
Java.util.UUID.randomUUID().toString()
Random ran = new Random();
int top = 3;
char data = ' ';
String dat = "";
for (int i=0; i<=top; i++) {
data = (char)(ran.nextInt(25)+97);
dat = data + dat;
}
System.out.println(dat);
次のクラスコードが役立つと思います。マルチスレッドをサポートしていますが、同期ブロックの削除やgetRandomId()メソッドへの同期など、いくつかの改善を行うことができます。
public class RandomNumberGenerator {
private static final Set<String> generatedNumbers = new HashSet<String>();
public RandomNumberGenerator() {
}
public static void main(String[] args) {
final int maxLength = 7;
final int maxTry = 10;
for (int i = 0; i < 10; i++) {
System.out.println(i + ". studentId=" + RandomNumberGenerator.getRandomId(maxLength, maxTry));
}
}
public static String getRandomId(final int maxLength, final int maxTry) {
final Random random = new Random(System.nanoTime());
final int max = (int) Math.pow(10, maxLength);
final int maxMin = (int) Math.pow(10, maxLength-1);
int i = 0;
boolean unique = false;
int randomId = -1;
while (i < maxTry) {
randomId = random.nextInt(max - maxMin - 1) + maxMin;
synchronized (generatedNumbers) {
if (generatedNumbers.contains(randomId) == false) {
unique = true;
break;
}
}
i++;
}
if (unique == false) {
throw new RuntimeException("Cannot generate unique id!");
}
synchronized (generatedNumbers) {
generatedNumbers.add(String.valueOf(randomId));
}
return String.valueOf(randomId);
}
}
最初に質問する必要があるのは、IDを本当にランダムにする必要があるかどうかです。時には、シーケンシャルIDで十分な場合もあります。
さて、あなたがそれをランダムにする必要がある場合、重複を含まない生成された数列はランダムと呼ぶことはできません。 :pこれで邪魔にならないので、これを行う最速の方法は、既に生成されたすべてのIDを含むHashtable
またはHashMap
を持つことです。新しいIDが生成されるたびに、ハッシュテーブルと照合し、IDが既に発生している場合は再生成します。生徒数がIDの範囲よりもはるかに少ない場合、これは一般的にうまく機能します。そうでない場合は、IDを再生成する必要が生じる確率が高くなるため、P(新しいIDの生成)= number_of_id_already_generated/number_of_all_possible_idsになります。この場合、最初の段落を確認してください(IDをランダムにする必要がありますか?)。
お役に立てれば。
多くの可能性...
整数をランダムに生成する方法を知っていますか?したがって、そこから文字を生成することができます...(ex 65-> A)
それはあなたが必要とするもの、ランダム性のレベル、関係するセキュリティに依存します...