Java RNG检查重复

时间:2015-05-04 20:21:59

标签: java arrays string random

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)以防止重复输入。我添加了部分代码,使其不会超级庞大。关于如何不重复数字的任何帮助或建议?

3 个答案:

答案 0 :(得分:0)

如果您在之前检查过某个号码是否在randomeNumbers 中,那么您就不需要将其删除。

答案 1 :(得分:0)

如果您只是想避免重复:

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做什么......

答案 2 :(得分:0)

在上面的代码中,如果您正在跟踪集合或列表中的数字,则不清楚。您应该在一组中跟踪它们,然后生成一个随机数,直到找到一个不在您的集合中的数字。完成后,请完成所有必要的转换/格式化。

你也可以预先填充一个列表,然后将其洗牌,最后选择前几个。

在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)

它不是最有效的方法,但它可以正常工作,并且不易出错。