簡體   English   中英

如何在二維數組的隨機位置中放置一定數量的整數?

[英]How can I put a certain amount of integers in random locations in a 2d array?

我試圖將一定數量的整數隨機放置到數組中,而不將它們放在同一位置。

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

您還沒有真正解釋什么不起作用。 但是算法中的一個明顯缺陷是不能保證將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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM