كيف يمكنني إنشاء عدد صحيح عشوائي N في Java باستخدام فئة BigInteger؟
-
02-10-2019 - |
سؤال
أنا غير متأكد من كيفية إنشاء عدد صحيح عشوائي N في Java باستخدام فئة BigInteger.
المحلول
private static Random rnd = new Random();
public static String getRandomNumber(int digCount) {
StringBuilder sb = new StringBuilder(digCount);
for(int i=0; i < digCount; i++)
sb.append((char)('0' + rnd.nextInt(10)));
return sb.toString();
}
ثم يمكنك استخدامه:
new BigInteger(getRandomNumber(10000))
نصائح أخرى
وفقًا للمستندات ، هناك مُنشئ للقيام بما تريد في Java 6: Biginteger (int ، java.util.random)
لذلك ، تحتاج فقط إلى إضافة رقم 5000 من الرقم 5000 ، استخدم مُنشئ RNG إلى 4999 رقمًا ، وهو إضافة آخر في عملية عشوائية منفصلة. في الواقع ، نظرًا لأنك ترغب في أخذ عينات من الأداء للقيم الكبيرة ، يمكنك إنشاء البتات ، وأن تتصدى قليلاً في النهاية الكبيرة ، بدلاً من الرقيق إلى الترميز العشري.
من المحتمل أن تكون أبسط طريقة هي ملء صفيف char [] مع 5000 رقم عشوائي ، وتحويل ذلك إلى سلسلة ، ثم اتصل BigInteger(String)
البناء.
إذا كان أي من هذه الخطوات يعطيك مشاكل ، فيرجى إعطاء المزيد من التفاصيل.
بدلا من ذلك ، أنت استطاع افعل شيئًا كهذا:
Random rng = new Random(); // But use one instance throughout your app
BigInteger current = BigInteger.ZERO;
for (int i = 0; i < 5000; i++) {
BigInteger nextDigit = BigInteger.valueOf(rng.nextInt(10));
current = current.multiply(BigInteger.TEN).add(nextDigit);
}
أظن أنه سيكون أقل كفاءة.
يمكنك تقليل عدد الخطوات المطلوبة عن طريق توليد تسعة أرقام عشوائية في كل مرة rng.nextInt(1000000000)
.
فيما يلي نسختان ، يأخذ أحدهما عشوائيًا كمعلمة (في حال كنت ترغب في إعادة استخدامه):
public static BigInteger getRandomNumber(final int digCount){
return getRandomNumber(digCount, new Random());
}
public static BigInteger getRandomNumber(final int digCount, Random rnd){
final char[] ch = new char[digCount];
for(int i = 0; i < digCount; i++){
ch[i] =
(char) ('0' + (i == 0 ? rnd.nextInt(9) + 1 : rnd.nextInt(10)));
}
return new BigInteger(new String(ch));
}
سيكون لدى BigInteger الناتج دائمًا الطول المحدد.
إذا كان N ما بين 1 إلى 12 ، فإن الطريقة التالية تساعد
private String getRandom(int length) {
if (length < 1 && length > 12) {
throw new IllegalArgumentException("Random number generator length should be between 1 to 12");
}
long nextLong = Math.abs(random.nextLong());
return String.valueOf(nextLong).substring(0, length);
}
شيء آخر يجب ملاحظة أنه ليس رمزًا تم اختباره جيدًا.
خذ سلسلة مع 5000 رقمها ثم قم بتحويلها إلى BigInteger.