当前位置: 首页 > 面试题库 >

在填充数组时检查重复项

郎河
2023-03-14
问题内容

我有一个数组,其中填充了6个随机生成的数字。首先,它生成一个介于1和49之间的随机数,然后将其与数组中的数字进行比较。如果发现重复,则应再次生成一个随机数,然后再次执行检查。如果没有重复项,则将数字添加到数组中。

这是代码

public void populateArray()
{
    for(int i = 0; i < numberLine.length; i++)
    {
        randomNumber = 1 + randomGen.nextInt(49);
        for(int j = 0; j < i; j++)
        {
            if (numberLine[j] == randomNumber)
            {
                i--;
            }
            else
            {
                continue;
            }
        }
        if(i >= 0)
        {
            numberLine[i] = randomNumber;
        }
        else
        {
            continue;
        }
    }
    Arrays.sort(numberLine);
}

但是,由于某种原因,它仍然允许重复,尽管很少(大约50个数组中的1个),例如6 6 16 24 34 46。但是,当我尝试通过取出随机数元素并使用30这样的数字来重复此操作时,我无法重现结果。怎么了


问题答案:

实际上,由于您的域限制为1到49之间的整数,因此最好使用布尔数组来指示数字是否已绘制:

public void populateArray()
{
    count = 0;
    boolean[] used = new boolean[50];
    while (count < 6) {
        randomNumber = 1 + randomGen.nextInt(49);
        if (!used[randomNumber]) ++count;
        used[randomNumber] = true;
    }


    int j = 0;
    for (int i = 1; i < used.length; ++i) {
        numberLine[j++] = i;
    }
}

编辑

那仍然有潜在的无限循环。

您正在绘制49个中的6个数字,没有重复项。正确的解决方案是:

 public void populateArray() {
    List<Integer> pool = new ArrayList<Integer>();
    for (int i = 0; i < 49; ++i) {
        pool.add(i + 1);
    }

    for (int i = 0; i < 6; ++i) {
        randomNumber = randomGen.nextInt(pool.size());
        numberLine[i] = pool.get(randomNumber);
        pool.remove(randomNumber);
    }

    Arrays.sort(numberLine);
}

有限循环,概率分布与原始循环相同。无需在遇到重复项时重试抽奖,只需消除预先绘制重复项的可能性。它基本上是在模仿真实的乐透状抽奖。



 类似资料:
  • 我正在用随机整数1-10填充数组,但是当我这样做的时候,我需要检查整数是否已经在数组中。我用整数填充数组没有问题,但是我检查重复整数的代码不能正常工作。 }

  • 使用下面的代码,我将创建一个包含JTextFields和JLabels的JPanel,并将该面板添加到另一个JPanel中。如何调整InfoPanel上JTextFields之间的间距?

  • Arrays 类提供了一个 fill() 方法,可以在指定位置进行数值填充。fill() 方法虽然可以填充数组,但是它的功能有限制, 只能使用同一个数值进行填充。语法如下: 其中,array 表示数组,value 表示填充的值。 例 1 声明一个 int 类型的 number 数组,然后通过 for 语句进行遍历,在该语句中调用 Arrays 类的 fill() 方法来填充数组,并输出数组中元素的

  • 问题内容: 我确信这是一个非常明显的问题,并且确实有一个函数可以执行此操作,但是我似乎找不到它。在PHP中,我想尽可能有效地知道数组中是否有重复项。我不想像删除它们一样,并且我也不希望运行并将其与原始数组进行比较以查看它们是否相同,因为这似乎效率很低。就性能而言,“预期条件”是该阵列没有重复项。 我只想做类似的事情 我有没有想到的明显功能? 具有正确的标题,并且是一个非常相似的问题,但是,如果您实

  • 作为一个相当环保的Java程序员,我给自己设定了一个巨大的挑战,试图编写一个简单的文本冒险。不出所料,我已经遇到了困难! 我正在尝试为我的 Location 类提供一个属性来存储它包含的出口。为此,我使用了一个布尔数组,基本上保存表示每个出口的真/假值。我不完全相信 a) 这是最有效的方法 b)我正在使用正确的代码来填充数组。 我将感谢任何和所有的反馈,即使是一个完整的代码超载! 目前,在实例化位

  • 问题内容: 在数组末尾加零的更Python方式是什么? 在我的实际用例中,实际上我想将数组填充到最接近的1024倍数。例如:1342 => 2048,3000 => 3072 问题答案: 使用mode可以满足您的需要,在这里我们可以传递一个元组作为第二个参数来告诉每个大小要填充多少个零,例如a将在左边填充 2个 零,在右边填充 3个 零: 给出为: 也可以通过将元组的元组作为填充宽度来填充2D n