【问题标题】:Java RNG check for duplicateJava RNG 检查重复项
【发布时间】:2015-07-14 09:03:28
【问题描述】:
for(int i=0;i<maxNumbers;i++)
    {
        int r = rgen.nextInt(100) + 1;
        if(randomNumbers.contains(r))
                {

                    randomNumbers.remove(r);
                }
        s += r + ",";

        randomNumbers.add(String.valueOf(r));
    }
int index = jList1.getSelectedIndex();

            // check that selected item matches number generated
             if(index >= 0) 
                 {
                    // get selected item
                    String item = (String)jList1.getSelectedValue();

   // check if this item in number list
                    if(randomNumbers.contains(item))
                    {

                        randomNumbers.remove(item);
                    }

我能够从 1-100 的数组列表中生成 5 个随机数,但我无法获取 randomNumbers.remove(item) 以防止重复条目。我添加了部分代码以使其不会变得超级笨重。有关如何不重复数字的任何帮助或建议?

【问题讨论】:

  • “项目”在哪里以及如何定义?
  • 我在代码中添加了项目。

标签: java arrays string random


【解决方案1】:

如果您在添加之前检查了randomeNumbers 中是否有一个号码,则不需要删除它。

【讨论】:

  • 我试图以这种方式检查它,但它没有工作 'code' for(int i=0;i
  • 如果randomNumbers 包含r,则不需要删除它,只需重新添加即可;不理会randomNumbers,减少i(因为您没有添加新数字)并保持循环。
【解决方案2】:

如果你只是想避免重复:

for(int i=0;i<maxNumbers;i++)
{
    int r = rgen.nextInt(100) + 1;
    if(!randomNumbers.contains(r))
    {
        randomNumbers.add(String.valueOf(r));
        s += r + ",";
    }
}

但你可能想继续前进,直到它满了:

int i=0;
while(i<maxNumbers)
{
    int r = rgen.nextInt(100) + 1;
    if(!randomNumbers.contains(r))
    {
        randomNumbers.add(String.valueOf(r));
        s += r + ",";
        i++;
    }
}

不确定你想对 jList 做什么。

【讨论】:

    【解决方案3】:

    在您上面的代码中,不清楚您是在跟踪一组号码还是一个列表。您应该在一组中跟踪它们并生成一个随机数,直到找到不在您的组中的一个。完成后,进行所有必要的转换/格式化。

    您也可以预先填充一个列表,然后随机播放,最后取出前几个。

    在 Java 中

    public static List<Integer> randomNumbers(int n, int take) {
        ArrayList<Integer> al = new ArrayList<>();
        for (int c = 0; c < n; ++c) {
            al.add(c);
        }
        Collections.shuffle(al);
        return al.subList(0, take);
    }
    

    Clojure

    user=> (->> (range 1 101) shuffle (take 5))
    (40 23 32 12 72)
    

    这不是最有效的方法,但它工作得很好,而且不太容易出错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 2017-04-15
      • 2017-09-16
      相关资源
      最近更新 更多