# Select random numbers without duplicates

suggest change/** * returns a array of random numbers with no duplicates * @param range the range of possible numbers for ex. if 100 then it can be anywhere from 1-100 * @param length the length of the array of random numbers * @return array of random numbers with no duplicates. */ public static int[] getRandomNumbersWithNoDuplicates(int range, int length){ if (length<range){ // this is where all the random numbers int[] randomNumbers = new int[length]; // loop through all the random numbers to set them for (int q = 0; q < randomNumbers.length; q++){ // get the remaining possible numbers int remainingNumbers = range-q; // get a new random number from the remainingNumbers int newRandSpot = (int) (Math.random()*remainingNumbers); newRandSpot++; // loop through all the possible numbers for (int t = 1; t < range+1; t++){ // check to see if this number has already been taken boolean taken = false; for (int number : randomNumbers){ if (t==number){ taken = true; break; } } // if it hasnt been taken then remove one from the spots if (!taken){ newRandSpot--; // if we have gone though all the spots then set the value if (newRandSpot==0){ randomNumbers[q] = t; } } } } return randomNumbers; } else { // invalid can't have a length larger then the range of possible numbers } return null; }

The method works by looping though an array that has the size of the requested length and finds the remaining length of possible numbers. It sets a random number of those possible numbers `newRandSpot`

and finds that number within the non taken number left. It does this by looping through the range and checking to see if that number has already been taken.

For example if the range is 5 and the length is 3 and we have already chosen the number 2. Then we have 4 remaining numbers so we get a random number between 1 and 4 and we loop through the range(5) skipping over any numbers that we have already used(2).

Now letâ€™s say the next number chosen between 1 & 4 is 3. On the first loop we get 1 which has not yet been taken so we can remove 1 from 3 making it 2. Now on the second loop we get 2 which has been taken so we do nothing. We follow this pattern until we get to 4 where once we remove 1 it becomes 0 so we set the new randomNumber to 4.