0

I reattempted my previous problem by including an array. The program has no errors but the numbers still repeat. Here is my code:

public static String ball() {
        String var = null;
        int ranVar[] = new int[75];
        final Random ran = new Random();
        int temp;

        for (int i = 0; i < ranVar.length; i++) {
            do {
                temp = ran.nextInt(74) + 1;
            } while (match(temp, ranVar));
            ranVar[i] = temp;
            if (ranVar[i] <= 15) {
                return var = "B" + ranVar[i];
            } else if (ranVar[i] <= 30) {
                return var = "I" + ranVar[i];
            } else if (ranVar[i] <= 45) {
                return var = "N" + ranVar[i];
            } else if (ranVar[i] <= 60) {
                return var = "G" + ranVar[i];
            } else if (ranVar[i] <= 75) {
                return var = "O" + ranVar[i];
            }

        }

        return null;
    }

    private static boolean match(int temp, int var[]) {
        for (int i = 0; i < var.length; i++) {
            if (temp == var[i]) {
                return true;
            }
        }
        return false;
    }

Thanks for any help.

ggorlen
  • 44,755
  • 7
  • 76
  • 106
  • looks correct and generates different combinations. But if your intention is to ranVar with random variables 75 times, then don't return in loop. Return the array once u have populated the array – Optional Dec 03 '19 at 03:36
  • Does this answer your question? [Random shuffling of an array](https://stackoverflow.com/questions/1519736/random-shuffling-of-an-array) – Peter O. Dec 03 '19 at 06:27

1 Answers1

0

Comments in-line


    // Seed your random number generator
    final static Random ran = new Random(System.currentTimeMillis());

    // create a set to store previously generated random numbers
    static Set<Integer> usedIntegers = new HashSet<>();

    // generate numbers until a number is found which is not been selected
    public static int nextAvailableRandomInteger(){
        int temp;
        do{
            temp = ran.nextInt(74) + 1;
        } while (usedIntegers.contains(temp));
        usedIntegers.add(temp);
        return temp;
    }


    // I have no idea what this method does. So I changed the random number generator part.
    public static String ball() {
        String var = null;
        int ranVar[] = new int[75];

        int temp;

        for (int i = 0; i < ranVar.length; i++) {
            do {
                temp = nextAvailableRandomInteger();
            } while (match(temp, ranVar));
            ranVar[i] = temp;
            if (ranVar[i] <= 15) {
                return var = "B" + ranVar[i];
            } else if (ranVar[i] <= 30) {
                return var = "I" + ranVar[i];
            } else if (ranVar[i] <= 45) {
                return var = "N" + ranVar[i];
            } else if (ranVar[i] <= 60) {
                return var = "G" + ranVar[i];
            } else if (ranVar[i] <= 75) {
                return var = "O" + ranVar[i];
            }

        }

        return null;
    }

    private static boolean match(int temp, int var[]) {
        for (int i = 0; i < var.length; i++) {
            if (temp == var[i]) {
                return true;
            }
        }
        return false;
    }

    // I have no idea what this method does. So I changed the random number generator part.
    public static String ball() {       
        String var = null;
        int ranVar[] = new int[75];

        int temp;

        for (int i = 0; i < ranVar.length; i++) {
            do {
                temp = nextAvailableRandomInteger();
            } while (match(temp, ranVar));
            ranVar[i] = temp;
            if (ranVar[i] <= 15) {
                return var = "B" + ranVar[i];
            } else if (ranVar[i] <= 30) {
                return var = "I" + ranVar[i];
            } else if (ranVar[i] <= 45) {
                return var = "N" + ranVar[i];
            } else if (ranVar[i] <= 60) {
                return var = "G" + ranVar[i];
            } else if (ranVar[i] <= 75) {
                return var = "O" + ranVar[i];
            }

        }

        return null;
    }

    private static boolean match(int temp, int var[]) {
        for (int i = 0; i < var.length; i++) {
            if (temp == var[i]) {
                return true;
            }
        }
        return false;
    }

PS: this is NOT the best way of doing this. Eventually the set will fill up with 75 numbers and without a way to exit the loop, the program will run indefinitely. One way of improving this is to generate a list of numbers, and then select from that list, removing the used ones, so that when you get to an empty list, the game stops.

Virtrics
  • 1
  • 1