我在这个问题上做了很多搜索,但是我找不到任何可用于我的问题的东西:我正在基于整数数组在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)。
答案 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;
}
}