Java:创建仅重复的数组

时间:2012-06-25 22:17:30

标签: java arrays duplicates

我在这个问题上做了很多搜索,但是我找不到任何可用于我的问题的东西:我正在基于整数数组在Java中创建一个简单的记忆游戏。我希望数组只包含重复的条目,而不是唯一的条目。不幸的是,这里的大多数问题都涉及避免或删除重复的条目,但是如何强制执行呢?

到目前为止我的代码看起来像这样。

public Field[] getField(){
    Random r = new Random();
    int pool = 16;
    ArrayList<Integer> used = new ArrayList<Integer>();
    int rand = r.nextInt(pool);
    System.out.println("First random: " + rand);

    for(int i = 0; i < fields.length; i++){
        System.out.println("ITERATION " + i + " STARTED");
        while(used.contains(rand)){
            System.out.println(rand + " is used, recalculating...");
            rand = r.nextInt(pool);
            System.out.println("New random is " + rand);
        }

        fields[i] = new Field(rand);
        System.out.println(rand + " added in Field " + i);

        int tmp = r.nextInt(fields.length - 1);
        System.out.println("First tmp calculated: " + tmp);

        while(fields[tmp] != null && i <= fields.length / 2){
            tmp = r.nextInt(fields.length - 1);
            System.out.println("Field " + tmp + " is used, looking for another...");
        }

        fields[tmp] = new Field(rand);
        System.out.println(rand + " added in temp Field " + tmp);

        used.add(rand);
        System.out.println("ITERATION " + i + " ENDED");
        System.out.println();
    }

    return fields;
}

fields []是Field类型的数组(基本上只有一个成员(int id)。

1 个答案:

答案 0 :(得分:1)

如果我理解你正确的事情,我认为你可能会比现在更加困难。

按顺序迭代fields数组更容易并在每次迭代时添加两个相同值的Fields,然后对数组进行随机播放。类似下面的代码:

{
    ...
    for (int i = 0; i < fields.length; i += 2)
        fields[i] = fields[i + 1] = new Field(r.nextInt(pool));

    shuffleFields(fields);

    return fields;
}

您可以选择改组算法。 Fisher-Yates shuffle很受欢迎。 E.g:

void shuffleFields (Field[] fields)
{
    Random r = new Random();
    for (int i = fields.length - 1; i >= 1; --i)
    {
        int j = r.nextInt(i + 1);
        Field t = fields[i];
        fields[i] = fields[j];
        fields[j] = temp;
    }
}