SORU
29 Aralık 2009, Salı


Java: bir numaralama rastgele bir değer Almak mı?

Eğer böyle bir sıralama yaparsam:

public enum Letter {
    A,
    B,
    C,
    //...
}

Rastgele bir seçim için en iyi yolu nedir? Üretim kaliteli kurşun geçirmez olması şart değil, ama oldukça eşit dağılım güzel olurdu.

Böyle bir şey yapabilirim

private Letter randomLetter() {
    int pick = new Random().nextInt(Letter.values().length);
    return Letter.values()[pick];
}

Ama orada daha iyi bir yolu var mı? Bunu daha önce çözülmüş bir şey olduğunu hissediyorum.

CEVAP
29 Aralık 2009, Salı


I-cekti önermek tek şey her kopya bir dizi diyoruz çünkü values() sonucu önbelleğe alma. Ayrıca, Random her zaman oluşturmak yok. Bir tane olsun. Ne yaptığını gayet iyi bunun dışında. Yani:

public enum Letter {
  A,
  B,
  C,
  //...

  private static final List<Letter> VALUES =
    Collections.unmodifiableList(Arrays.asList(values()));
  private static final int SIZE = VALUES.size();
  private static final Random RANDOM = new Random();

  public static Letter randomLetter()  {
    return VALUES.get(RANDOM.nextInt(SIZE));
  }
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gali B

    Gali B

    1 EYLÜL 2006
  • LinusTechTips

    LinusTechTip

    25 Kasım 2008
  • Paulo Bautista

    Paulo Bautis

    21 Aralık 2008