I am trying to write a simple random number generator class that will print non duplicate numbers within a given range of max and min. I have the logic all down and I am using a set as well however I still get some repeating numbers. The idea is that if I declare min and max to be 0 and 5 I should get random numbers like 2 3 1 5 4 0. Then it can reset and give me the numbers again randomly within the range without repetition. See code below
package RandomNumberGen;
import java.util.*;
public class RandomNumberGenerator {
Random random = new Random();
int minimum;
int maximum;
Set<Integer> hSet = new HashSet<>(range);
public RandomNumberGenerator(int min, int max)
{
minimum = min;
maximum = max;
}
public void generateRandomNumbers()
{
int range = maximum - minimum + 1;
int randomValue = 0;
if(shouldReset())
{
hSet.clear();
}
do
{
randomValue = minimum + random.nextInt(range);
} while(!hSet.add(randomValue));
System.out.println("The next random number is: " + randomValue);
}
public boolean shouldReset()
{
return hSet.size() >= maximum - minimum + 1;
}
public static void main(String[] args)
{
RandomNumberGenerator rng = new RandomNumberGenerator(1,10);
rng.generateRandomNumbers();
rng.generateRandomNumbers();
rng.generateRandomNumbers();
rng.generateRandomNumbers();
rng.generateRandomNumbers();
rng.generateRandomNumbers();
rng.generateRandomNumbers();
rng.generateRandomNumbers();
rng.generateRandomNumbers();
rng.generateRandomNumbers();
System.out.println("Should restart now");
rng.generateRandomNumbers();
rng.generateRandomNumbers();
rng.generateRandomNumbers();
}
}
Currently in my output I am getting this despite using a HashSet to remove non repeating integers: I am expecting something like 10 8 7 5 9 6 but instead I get
The next random number is: 9
The next random number is: 6
The next random number is: 8
The next random number is: 9
The next random number is: 6
The next random number is: 8