更改布尔数组中的值。选择不值钱的地方

时间:2018-11-28 10:09:00

标签: java arrays random boolean

我不确定是否可以。我正在建立一个程序来选择乐透行。我有一个for循环,可以从1到35中随机选择七个数字。我的计划是,我可以制作一个布尔数组,然后选择一个随机数来选择布尔数组中的一个位置(而不是一个值)并将其更改为真正。

通过这种方式,我可以获得行号,并且可以确定在数组为真时该行号已被占用。

C:/Python/Envs/project/

我该怎么做?它甚至是解决此问题的好方法吗?

2 个答案:

答案 0 :(得分:3)

您可以使用array[index]

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

这会将randomNr - 1中的lottoRow的索引(在问题中称为 place )分配给true。请注意,由于数组是- 1,所以我添加了0-indexed

答案 1 :(得分:1)

另一种方法是直接生成数字而无需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次,或存储已经绘制的数字。这正是上面的解决方案,而且速度更快。