我试图将一定数量的整数放入一个随机点的数组中,而不将它们放在同一个地方。
我的combine方法连接两个给定的整数并返回Int。 Places是一个arrayList,用于保存已放入数组的整数的位置。 random方法在两个给定的int之间返回一个随机整数。
组合方法有效,随机方法也有效,但我不确定它为什么不起作用。
public void fillOne(int b)
{
for(int x = 0; x < b; x++)
{
int kachow = random(0, 5);
int kachigga = random(0, 5);
int skrrt = combine(kachow, kachigga);
if(notInArray(skrrt))
{
locations[kachow][kachigga] = 1;
places.add(skrrt);
}
}
}
答案 0 :(得分:0)
你还没有真正解释什么不起作用。但是,算法中的一个明显缺陷是,不能保证将b
元素设置为1
。如果您的算法生成重复的位置,那么它将设置少于b
个元素。
存储组合位置的逻辑过于复杂。一种解决方案是反转逻辑:生成表示两个维度的单个整数,然后在设置位置时将其分为两个。这使得检查变得更加简单。
例如,如果您的数组是5x5:
Set<Integer> positions = new HashSet<>();
while (positions.size() < n)
positions.add(random.nextInt(25));
for (int p: positions)
locations[p/5][p%5] = 1;
由于positions
是一个集合,因此它会自动排除重复项,这意味着代码会不断添加随机位置,直到它们在集合中的n
个不同位置。
如果您使用的是Java 8,则更简单:
random.ints(0, 25)
.distinct().limit(n)
.forEach(p -> locations[p/5][p%5] = 1);