我不确定是否可以。我正在建立一个程序来选择乐透行。我有一个for循环,可以从1到35中随机选择七个数字。我的计划是,我可以制作一个布尔数组,然后选择一个随机数来选择布尔数组中的一个位置(而不是一个值)并将其更改为真正。
通过这种方式,我可以获得行号,并且可以确定在数组为真时该行号已被占用。
C:/Python/Envs/project/
我该怎么做?它甚至是解决此问题的好方法吗?
答案 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
次,或存储已经绘制的数字。这正是上面的解决方案,而且速度更快。