Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to generate a random number from a pool of number who aren't following each other

Tags:

java

c#

random

I got a pool of numbers (for example {3,6,7,11,20}) and i need each number to appear in my collection x times.

My solution was to create a class, let's call it "element", of two integers (num,numOfAppearnces).

I created a pool of "elements" in arrayList, and then generated a random numbers between 0 to list.size, and got the number stored in the random index. when numOfAppearances decreased to 0, i deleted this element from the list.

my question is, is there any other elegant solution to generate random number, not from a range?

like image 453
Aviv Avatar asked Mar 10 '23 10:03

Aviv


1 Answers

Yes, there are shorter ways to achieve what you describe.

For example :

Integer[] arr = {3,6,7,11,20};
List<Integer> shuffled = new ArrayList<>();
for (Integer i : arr)
    shuffled.addAll (Collections.nCopies(x,i)); // add i to your List x times
Collections.shuffle(shuffled); // shuffle the List to get random order

Or (if you don't want to use Collections.nCopies(x,i)) :

Integer[] arr = {3,6,7,11,20};
List<Integer> shuffled = new ArrayList<>();
for (int j = 0; j < x; j++)
    for (Integer i : arr)
        shuffled.add (i);
Collections.shuffle(shuffled); // shuffle the List to get random order
like image 131
Eran Avatar answered Apr 07 '23 18:04

Eran