Back

Explore Courses Blog Tutorials Interview Questions
0 votes
3 views
in Java by (10.2k points)

If I have an enum like this:

public enum Letter {

    A,

    B,

    C,

    //...

}

What is the best way to pick one randomly? It doesn't need to be production quality bulletproof, but a fairly even distribution would be nice.

I could do something like this

private Letter randomLetter() {

    int pick = new Random().nextInt(Letter.values().length);

    return Letter.values()[pick];

}

But is there a better way? I feel like this is something that's been solved before.

1 Answer

0 votes
by (46k points)

The only thing I would suggest is caching the result of values() because each call copies an array. Also, don't create a Random every time. Keep one. Other than that what you're doing is fine. So:

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));

  }

}

Related questions

0 votes
1 answer
0 votes
1 answer
0 votes
1 answer
asked Oct 23, 2019 in Java by Anvi (10.2k points)
0 votes
1 answer
asked Oct 17, 2019 in Java by Anvi (10.2k points)
0 votes
1 answer
Welcome to Intellipaat Community. Get your technical queries answered by top developers!

28.5k questions

29.9k answers

500 comments

99.1k users

Browse Categories

...