SORU
12 Aralık 2008, Cuma


Rastgele oluşturuluyor Java ile bir aralıkta bir tamsayı

Java, ama belirli bir aralıkta rasgele rasgele bir tamsayı oluşturmak için çalışıyorum. Örneğin, benim aralığı 5 rasgele sayı alamaz, mümkün olan en küçük değeri 5-10, anlam ve 10 en büyüğüdür. Bu sayılar bir değer de olması mümkündür arasında başka bir sayı.

Java, bir yöntemdir 0.0 ve 1.0 arasında double değerini döndürür ** 5 sınıfı random(). Sınıf Random orada bir yöntem 0 aralığında rasgele bir tamsayı değerini verir nextInt(int n), (dahil) (özel) n. İki sayı arasında rastgele tam sayı değeri döndüren bir yöntem bulamadım.

Şunları denedim, ama hala bazı sorularım var: en az ve en küçük ve en büyük sayılar ().

Çözüm 1:

randomNum = minimum   (int)(Math.random()*maximum); 

Sorun: randomNum assinged değerleri sayı maximum daha büyük.

Çözüm 2:

Random rn = new Random();
int n = maximum - minimum   1;
int i = rn.nextInt() % n;
randomNum =  minimum   i;

Sorun: randomNum atanmış değerleri minimum daha küçük.

Bu sorunu nasıl çözerim?

Ayrıca arşiv ile tarama çalıştım ve buldum:

Ama sorunu çözmek edemedim.

CEVAP
12 Aralık 2008, Cuma


Bunu yapmak için standart bir yol (Java 1.7 önce) aşağıdaki gibidir:

import java.util.Random;

/**
 * Returns a pseudo-random number between min and max, inclusive.
 * The difference between min and max can be at most
 * <code>Integer.MAX_VALUE - 1</code>.
 *
 * @param min Minimum value
 * @param max Maximum value.  Must be greater than min.
 * @return Integer between min and max, inclusive.
 * @see java.util.Random#nextInt(int)
 */
public static int randInt(int min, int max) {

    // NOTE: This will (intentionally) not run as written so that folks
    // copy-pasting have to think about how to initialize their
    // Random instance.  Initialization of the Random instance is outside
    // the main scope of the question, but some decent options are to have
    // a field that is initialized once and then re-used as needed or to
    // use ThreadLocalRandom (if using at least Java 1.7).
    Random rand;

    // nextInt is normally exclusive of the top value,
    // so add 1 to make it inclusive
    int randomNum = rand.nextInt((max - min)   1)   min;

    return randomNum;
}

the relevant JavaDoc bkz. Uygulamada java.util.Random sınıf genellikle java.lang.Math.random() tercih edilir.

Özellikle, standart kütüphane içinde basit bir API görevi gerçekleştirmek için zaman rasgele tamsayı nesil tekerleği yeniden icat etmeye gerek yok.

Java 1.7 veya daha sonra aşağıdaki method daha da basit açıkça ilk tohum ayarlamak için gerek yoktur sürece

import java.util.concurrent.ThreadLocalRandom;

// nextInt is normally exclusive of the top value,
// so add 1 to make it inclusive
ThreadLocalRandom.current().nextInt(min, max   1);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BlackBoxTV

    BlackBoxTV

    7 Mayıs 2007
  • Friday NightFort

    Friday Night

    15 EYLÜL 2011
  • thewinekone

    thewinekone

    17 Aralık 2005