[英]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.