如何在二维数组中的随机位置放置一定数量的整数?

时间:2017-03-12 18:55:15

标签: java

我试图将一定数量的整数放入一个随机点的数组中,而不将它们放在同一个地方。

我的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);
        }
    }
}

1 个答案:

答案 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);