كيف يمكنني إنشاء عدد صحيح عشوائي N في Java باستخدام فئة BigInteger؟

StackOverflow https://stackoverflow.com/questions/3709521

  •  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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top