Java 更改布尔数组中的值。选择地点而不是价值

Java 更改布尔数组中的值。选择地点而不是价值,java,arrays,random,boolean,Java,Arrays,Random,Boolean,我不确定这是否可能。我正在建立一个选择彩票行的程序。我有一个for循环,从1到35随机选取7个数字。我的计划是,我可以创建一个布尔数组,然后从其中的一个随机数中选择一个位置,而不是布尔数组中的值,并将其更改为True 通过这种方式,我得到了行号,并且我确信当数组的位置为true时,就会得到行号 import java.util.Random; { public static void main(String[] args) { int randomNr; boolean[]

我不确定这是否可能。我正在建立一个选择彩票行的程序。我有一个for循环,从1到35随机选取7个数字。我的计划是,我可以创建一个布尔数组,然后从其中的一个随机数中选择一个位置,而不是布尔数组中的值,并将其更改为True

通过这种方式,我得到了行号,并且我确信当数组的位置为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;

    }
}
我该怎么做?这是解决这个问题的好方法吗

您可以使用数组[index]来执行此操作:

for (int i = 0; i < 7; i++) {
    randomNr = randNr.nextInt(35) + 1;
    lottoRow[randomNr - 1] = true;
}
这会将您在lottoRow的问题randomNr-1中称之为place的索引指定为true。请注意,我添加了-1,因为数组是0索引的。

您可以使用array[index]进行此操作:

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

这会将您在lottoRow的问题randomNr-1中称之为place的索引指定为true。请注意,我添加了-1,因为数组是0索引的。

另一种方法是直接生成数字,而不需要布尔[]

我发现直接生成值比在数组中存储布尔值更简单。最后,您只需要知道绘制了哪些数字,而不是绘制了哪些数字


此外,您的解决方案不考虑重复数字,因此相同的数字可能多次绘制。为了避免这种情况,您必须在数组中迭代n次,或者存储已经绘制的数字。这正是上面的解决方案,而且速度更快。

另一种方法是直接生成数字,而不需要布尔[]

我发现直接生成值比在数组中存储布尔值更简单。最后,您只需要知道绘制了哪些数字,而不是绘制了哪些数字


此外,您的解决方案不考虑重复数字,因此相同的数字可能多次绘制。为了避免这种情况,您必须在数组中迭代n次,或者存储已经绘制的数字。这正是上面的解决方案,而且速度更快。

@Joakim请注意,nextInt可以给您两次相同的数字……实际上,两次获得相同数字的机会非常高。我建议首先将所有数字存储在集合中,直到它有7个元素,然后迭代并更新lottoRow@Joakim请注意,nextInt可以给您两次相同的数字…实际上,获得相同数字两次的机会非常高。我建议首先将所有数字存储在集合中,直到它有7个元素,然后遍历它并更新lottoRow
public int getNextNumber(Random random) {
    return random.nextInt(35) + 1;
}