Генератор случайных чисел создает одинаковые числа - PullRequest
0 голосов
/ 26 апреля 2019

При циклическом цикле for, длина которого случайным образом равна 1-10. Я также прохожу цикл. Я пытаюсь найти 6 случайных чисел между 1-42. Затем я делаю это снова (1-10) раз. В настоящее время эти 6 случайных чисел остаются неизменными. Я подозреваю, что это имеет отношение к семени, но я не мог решить это.

Я пытался использовать как SecureRandom, Random, так и через Math.random () Ничего не сработало.

Модель:

    public static final int MAX_TIPS = 10;
    public static final int MIN_TIPS = 1;
    public static final int REQUIRED_NUMBERS = 6;
    public static final int RANGE_NUMBER_MIN = 1;
    public static final int RANGE_NUMBER_MAX = 42;
    public static final int RANGE_LUCKY_NUMBER_MIN = 1;
    public static final int RANGE_LUCKY_NUMBER_MAX = 6;

    private Random random = new Random();

    private int getRandomInt(int min, int max) {
         return random.nextInt((max - min) + 1) + min;
    }

    public ArrayList<LottoTip> createOpponentTips() {
        ArrayList<Integer> opponentChosenNumbers = new ArrayList<>();
        ArrayList<LottoTip> lottoTips = new ArrayList<>();

        //1-10
        int amountOfTips = getRandomInt(MIN_TIPS, MAX_TIPS);

        for (int i = 0; i < amountOfTips; i++) {

            int[] arrayOpponentChosenNumbers = new int[REQUIRED_NUMBERS];

            while (opponentChosenNumbers.size() < REQUIRED_NUMBERS) {

                //1-42 This here is the problem zone

                int randomNumber = getRandomInt(RANGE_NUMBER_MIN, RANGE_NUMBER_MAX);
                if (!opponentChosenNumbers.contains(randomNumber)) {
                    opponentChosenNumbers.add(randomNumber);
                }
            }
            //1-6 ---This here works
            int opponentLuckyNumber = getRandomInt(RANGE_LUCKY_NUMBER_MIN, RANGE_LUCKY_NUMBER_MAX);

            for (int j = 0; j < opponentChosenNumbers.size(); j++) {
                arrayOpponentChosenNumbers[j] = opponentChosenNumbers.get(j);
            }

            lottoTips.add(new LottoTip(arrayOpponentChosenNumbers, opponentLuckyNumber));
        }

        return lottoTips;
    }

LottoTip:

public class LottoTip {
    private int[] numbers;
    private int luckyNumber;

    public LottoTip(int[] numbers, int luckyNumber) {
        this.numbers = numbers;
        this.luckyNumber = luckyNumber;
    }

    public String getNumbers() {
        return numbers[0] + ", " + numbers[1] + ", " + numbers[2] + ", " + numbers[3] + ", " + numbers[4] + ", " + numbers[5];
    }

    public void setNumbers(int[] numbers) {
        this.numbers = numbers;
    }

    public int[] getNumbersArray() {
        return numbers;
    }

    public int getLuckyNumber() {
        return luckyNumber;
    }

    public void setLuckyNumber(int luckyNumber) {
        this.luckyNumber = luckyNumber;
    }

    @Override
    public String toString() {
        return "\nNumbers: " + getNumbers() + " Lucky Number: " + luckyNumber;
    }
}

Вот System.out.println, поскольку вы можете видеть, что числа остаются прежними. Не могли бы вы помочь мне найти способ создать метод getRandomInt, который работает постоянно?

Большое спасибо за вашу помощь.

Kerry York [
Numbers: 6, 4, 30, 15, 25, 5 Lucky Number: 2, 
Numbers: 6, 4, 30, 15, 25, 5 Lucky Number: 4, 
Numbers: 6, 4, 30, 15, 25, 5 Lucky Number: 5, 
Numbers: 6, 4, 30, 15, 25, 5 Lucky Number: 1, 
Numbers: 6, 4, 30, 15, 25, 5 Lucky Number: 3, 
Numbers: 6, 4, 30, 15, 25, 5 Lucky Number: 6]

Don Dickinson [
Numbers: 23, 29, 34, 18, 16, 19 Lucky Number: 6, 
Numbers: 23, 29, 34, 18, 16, 19 Lucky Number: 5, 
Numbers: 23, 29, 34, 18, 16, 19 Lucky Number: 3, 
Numbers: 23, 29, 34, 18, 16, 19 Lucky Number: 2, 
Numbers: 23, 29, 34, 18, 16, 19 Lucky Number: 4, 
Numbers: 23, 29, 34, 18, 16, 19 Lucky Number: 1, 
Numbers: 23, 29, 34, 18, 16, 19 Lucky Number: 1, 
Numbers: 23, 29, 34, 18, 16, 19 Lucky Number: 4, 
Numbers: 23, 29, 34, 18, 16, 19 Lucky Number: 3]

Clifford Weinstein [
Numbers: 6, 33, 13, 2, 37, 38 Lucky Number: 6, 
Numbers: 6, 33, 13, 2, 37, 38 Lucky Number: 3, 
Numbers: 6, 33, 13, 2, 37, 38 Lucky Number: 2, 
Numbers: 6, 33, 13, 2, 37, 38 Lucky Number: 1, 
Numbers: 6, 33, 13, 2, 37, 38 Lucky Number: 4, 
Numbers: 6, 33, 13, 2, 37, 38 Lucky Number: 3, 
Numbers: 6, 33, 13, 2, 37, 38 Lucky Number: 5, 
Numbers: 6, 33, 13, 2, 37, 38 Lucky Number: 6, 
Numbers: 6, 33, 13, 2, 37, 38 Lucky Number: 3, 
Numbers: 6, 33, 13, 2, 37, 38 Lucky Number: 3]

Angela Spencer [
Numbers: 12, 39, 8, 25, 40, 15 Lucky Number: 6, 
Numbers: 12, 39, 8, 25, 40, 15 Lucky Number: 3, 
Numbers: 12, 39, 8, 25, 40, 15 Lucky Number: 2, 
Numbers: 12, 39, 8, 25, 40, 15 Lucky Number: 4, 
Numbers: 12, 39, 8, 25, 40, 15 Lucky Number: 5, 
Numbers: 12, 39, 8, 25, 40, 15 Lucky Number: 4, 
Numbers: 12, 39, 8, 25, 40, 15 Lucky Number: 2, 
Numbers: 12, 39, 8, 25, 40, 15 Lucky Number: 2, 
Numbers: 12, 39, 8, 25, 40, 15 Lucky Number: 3]

Leroy McIntosh [
Numbers: 5, 23, 2, 24, 28, 3 Lucky Number: 1]

1 Ответ

4 голосов
/ 26 апреля 2019

Вы повторно используете список opponentChosenNumbers между итерациями внешнего цикла for.

Таким образом, на второй итерации защита цикла while

while (opponentChosenNumbers.size() < REQUIRED_NUMBERS) {

сразу ложно, поэтому вы не выбираете новые случайные числа.

Переместите объявление opponentChosenNumbers в цикл for (или убедитесь, что оно пусто до цикла while, например, путем вызова opponentChosenNumbers.clear()).

...