Изменить значение в логическом массиве.Выберите место не значение - PullRequest
0 голосов
/ 28 ноября 2018

Я не уверен, что это возможно.Я строю программу, чтобы выбрать лотерею.У меня есть цикл for для случайного выбора семи чисел от 1 до 35. Мой план состоит в том, что я могу создать логический массив, а затем взять одно из случайных чисел, чтобы выбрать место (не значение) в логическом массиве и изменить его наПравда.

Таким образом, у меня есть номер строки, и я уверен, что номер берется, когда массив помещается в true.

import java.util.Random; {


public static void main(String[] args) {
    int randomNr;
    boolean[] lottoRow = new boolean[35];

    Random randNr = new Random();

    for(int i=0; i<7; i++) {
        randomNr = randNr.nextInt(35)+1;

    }
}

Как мне это сделать?Это даже хороший способ подойти к этой проблеме?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Другой подход заключается в том, чтобы генерировать числа напрямую, без необходимости boolean[].

Set<Integer> numbers = new HashSet<>();
Random random = new Random();

for (int i = 0; i < 6; i++) {
    int number = getNextNumber(random);
    // we can get the same number twice
    while (numbers.contains(number)) {
        number = getNextNumber(random);
    }
    numbers.add(number);
}

, где getNextNumber() определяется как:

public int getNextNumber(Random random) {
    return random.nextInt(35) + 1;
}

Я нахожупроще генерировать значения напрямую, чем хранить логические значения в массиве.В конце вам нужно только знать, какие цифры нарисованы, а не какие цифры не нарисованы.

Кроме того, ваше решение не учитывает дублирующиеся номера, поэтому один и тот же номер может быть нарисован несколько раз.Чтобы предотвратить это, вам придется либо перебирать массив n раз, либо сохранять уже нарисованные числа.Это именно то решение, которое описано выше, и оно быстрее.

0 голосов
/ 28 ноября 2018

Вы можете использовать array[index] для этого:

for (int i = 0; i < 7; i++) {
    randomNr = randNr.nextInt(35) + 1;
    lottoRow[randomNr - 1] = true;
}

Это назначит индекс (вы называете его место в вашем вопросе) randomNr - 1 из lottoRow для true.Обратите внимание, что я добавил - 1, поскольку массивы 0-indexed.

...